diff --git a/mallinkAdmin/pom.xml b/mallinkAdmin/pom.xml index 43afbdba7..3e3e3f8d8 100644 --- a/mallinkAdmin/pom.xml +++ b/mallinkAdmin/pom.xml @@ -34,6 +34,18 @@ 1.3.3 + + com.google.zxing + core + 3.3.3 + + + + com.github.axet + kaptcha + 0.0.9 + + diff --git a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java index f1c776d8b..f72f27524 100644 --- a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java +++ b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java @@ -1,6 +1,7 @@ package com.iformall; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -18,6 +19,7 @@ import tk.mybatis.spring.annotation.MapperScan; @EnableSwagger2 @EnableEncryptableProperties @EnableAsync +@EnableRocketMQ public class UserApplication { @Value("${fm.exception}") diff --git a/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java index 2e6e9bc63..0cd431813 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java @@ -1,6 +1,7 @@ package com.iformall.config; import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxScoreRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,4 +110,36 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } + @Bean("openRedisTemplate") + public RedisTemplate getWeChatOpen(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + // value值的序列化 + template.setValueSerializer(new StringRedisSerializer()); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java index eea18fcdc..e835e2477 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java @@ -94,16 +94,32 @@ public class ShiroConfig { //拦截器. Map filterChainDefinitionMap = new LinkedHashMap(); - //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了 - filterChainDefinitionMap.put("/logout", "anon"); //filterChainDefinitionMap.put("/ue/**", "anon"); //filterChainDefinitionMap.put("/config.json", "anon"); + // login filterChainDefinitionMap.put("/doLogin/**", "anon"); filterChainDefinitionMap.put("/bHidLogin/**", "anon"); + filterChainDefinitionMap.put("/sendLoginPhoneCode/**", "anon"); + filterChainDefinitionMap.put("/doLoginByPhone/**", "anon"); + filterChainDefinitionMap.put("/wechat/callback", "anon"); // 微信第三方登录callback + filterChainDefinitionMap.put("/wechat/weChatUserLogin", "anon"); // 微信第三方登录绑定 + // callback + filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); // 支付回调 + filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon"); + filterChainDefinitionMap.put("/wxMsgCallback/**", "anon"); + filterChainDefinitionMap.put("/user/sendvalidationcode", "anon"); + filterChainDefinitionMap.put("/user/updatepwd", "anon"); + filterChainDefinitionMap.put("/carCallback/**", "anon"); + filterChainDefinitionMap.put("/wxMallApply/add", "anon"); + filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode", "anon"); + + // static files filterChainDefinitionMap.put("/css/**", "anon"); filterChainDefinitionMap.put("/js/**", "anon"); filterChainDefinitionMap.put("/img/**", "anon"); filterChainDefinitionMap.put("/font-awesome/**", "anon"); + // 验证码 + filterChainDefinitionMap.put("/captcha.jpg", "anon"); //:这是一个坑呢,一不小心代码就不好使了; // //自定义加载权限资源关系 @@ -116,22 +132,20 @@ public class ShiroConfig { // filterChainDefinitionMap.put(resources.getUrl(),permission); // } // } + // swagger-ui filterChainDefinitionMap.put("/swagger-ui.html", "anon"); - filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); - filterChainDefinitionMap.put("/wxOpen/**", "anon"); - filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon"); filterChainDefinitionMap.put("/v2/**", "anon"); filterChainDefinitionMap.put("/swagger-resources/**", "anon"); filterChainDefinitionMap.put("/webjars/**", "anon"); - filterChainDefinitionMap.put("/wxMsgCallback/**", "anon"); - filterChainDefinitionMap.put("/user/sendvalidationcode", "anon"); - filterChainDefinitionMap.put("/user/updatepwd", "anon"); - filterChainDefinitionMap.put("/carCallback/**", "anon"); - filterChainDefinitionMap.put("/wxMallApply/add", "anon"); - filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode", "anon"); - filterChainDefinitionMap.put("/captcha.jpg", "anon"); + filterChainDefinitionMap.put("/version", "anon"); + filterChainDefinitionMap.put("/wxDeviceScreenAd/**", "anon"); // filterChainDefinitionMap.put("/role/**", "corsFilter,token"); + + + //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了 + filterChainDefinitionMap.put("/logout", "authc"); + filterChainDefinitionMap.put("/**", "corsFilter,token,authc"); // filterChainDefinitionMap.put("/**", "anon"); diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java new file mode 100644 index 000000000..4dff6c762 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java @@ -0,0 +1,33 @@ +package com.iformall.config; + +import me.chanjar.weixin.mp.api.WxMpConfigStorage; +import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Component +public class WechatMpConfig { + + @Autowired + private WechatWebProperties wechatWebProperties; + + @Bean + public WxMpService wxMpService() { + //创建WxMpService实例并设置appid和sectret + WxMpService wxMpService = new WxMpServiceImpl(); + //这里的设置方式是跟着这个sdk的文档写的 + wxMpService.setWxMpConfigStorage(wxConfigProvider()); + return wxMpService; + } + + @Bean + public WxMpConfigStorage wxConfigProvider(){ + WxMpInMemoryConfigStorage wxConfigProvider = new WxMpInMemoryConfigStorage(); + wxConfigProvider.setAppId(wechatWebProperties.getAppId()); + wxConfigProvider.setSecret(wechatWebProperties.getSecret()); + return wxConfigProvider; + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java b/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java new file mode 100644 index 000000000..0b9047399 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java @@ -0,0 +1,59 @@ +package com.iformall.config; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * Stormeye + */ +@Component +@ConfigurationProperties(prefix = "wechat.web") +public class WechatWebProperties { + /** + * 设置微信第三方平台-微信登录的web应用appid + */ + private String appId; + + /** + * 设置微信第三方平台-微信登录的web应用app secret + */ + private String secret; + + /** + * 网页URL + * @return + */ + private String url; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, + ToStringStyle.MULTI_LINE_STYLE); + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java index b49bb0d26..53b6369fd 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java @@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest; @RestController public class BaseController { + @InitBinder public void InitBinder(WebDataBinder dataBinder) { dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java index 80d3664f9..b6526d4ea 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java @@ -1,25 +1,28 @@ package com.iformall.controller; -import com.github.pagehelper.PageInfo; import com.google.code.kaptcha.Constants; import com.google.code.kaptcha.Producer; import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.MallRolePermission; -import com.iformall.domain.po.MallUserInfo; -import com.iformall.domain.po.MallUserRole; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.MallUserInfoVo; +import com.iformall.enums.EnumMallUserStatus; +import com.iformall.enums.EnumMsgModel; import com.iformall.exception.MallinkException; -import com.iformall.service.MallRolePermissionService; -import com.iformall.service.MallUserInfoService; -import com.iformall.service.MallUserRoleService; +import com.iformall.service.*; import com.iformall.shiro.UserSession; import com.iformall.shiro.UseriFormallToken; import com.iformall.utils.ShiroUtils; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; @@ -31,9 +34,13 @@ import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; @RestController @@ -54,7 +61,10 @@ public class HomeController extends BaseController { private MallUserRoleService mallUserRoleService; @Autowired - private MallRolePermissionService mallRolePermissionService; + private WxAppinfoService appinfoService; + + @Autowired + private WxMsgValidationcodeService wxMsgValidationcodeService; @GetMapping("/captcha.jpg") public void captcha(HttpServletResponse response)throws ServletException, IOException { @@ -76,7 +86,7 @@ public class HomeController extends BaseController { @ApiOperation("登录") @PostMapping("/doLogin") - public ResultData login(@RequestBody MallUserInfo user) { + public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) { logger.debug("[" + getIpAddr() + "] HomeController::login"); try { String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY); @@ -92,97 +102,101 @@ public class HomeController extends BaseController { ResultData data = new ResultData(); if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) { // throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR); - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + // check user + MallUserInfo userCheck = mallUserInfoService.getByUsername(user.getUsername()); + if(userCheck == null) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); } + if(userCheck.getStatus().equals(EnumMallUserStatus.NOT_VALID.getCode())) { + logger.error(ErrorCode.USER_IS_LOCKED.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + boolean isLogin = false; try { Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword()); subject.login(token); -// List roleList = sysRoleService.findRoleByUserId(user.getId()); -// if (null != roleList && roleList.size() > 0) { -// List permissionList = sysPermissionService -// .findPermissionByRoleIds(roleList.stream().map(MallRole::getId).collect(Collectors.toList())); -// user.setRole(roleList); -// user.setPermission(permissionList); -// } + isLogin = true; + } catch (UnknownAccountException e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } catch (DisabledAccountException e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_PASSWD_ERR); + } + if(isLogin) { MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); info.setPassword("保密"); -// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId()); - String menus = getPermissionsByRole(info); + if(StringUtils.isNotBlank(info.getBopenId())) + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + } + + String menus = mallUserRoleService.getPermissionsByUser(info); if(menus != null) { info.setMenus(menus); } - data.data = info; - } catch (Exception e) { - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); - } - return data; - } - private String getPermissionsByRole(MallUserInfo info) { - MallUserRole ur = new MallUserRole(); - ur.setUid(info.getId()); - PageInfo page = mallUserRoleService.listAsPage(ur, 1, 1); - if (page.getSize() > 0) { - Long roleId = page.getList().get(0).getRoleId(); - MallRolePermission p = new MallRolePermission(); - p.setRoleId(roleId); - p.setTenantId(info.getTenantId()); - PageInfo listAsPage = mallRolePermissionService.listAsPage(p, 1, 100); - String menus = ""; - for (MallRolePermission rp : listAsPage.getList()) { - menus += rp.getPermissionId() + ","; - } - if (menus.length() > 0) { - menus = menus.substring(0, menus.length() - 1); + try { + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); } - return menus; + + data.data = info; } - return null; + return data; } private boolean isInMobileAdmin(MallUserInfo user) { // 检查用户是否有 移动端数据塔台 权限 boolean isInMobile = false; - MallUserRole ur = new MallUserRole(); - ur.setUid(user.getId()); - PageInfo page = mallUserRoleService.listAsPage(ur, 1, 1); - if (page.getSize() > 0) { - Long roleId = page.getList().get(0).getRoleId(); - MallRolePermission p = new MallRolePermission(); - p.setRoleId(roleId); - p.setTenantId(user.getTenantId()); - PageInfo listAsPage = mallRolePermissionService.listAsPage(p, 1, 100); - for (MallRolePermission rp : listAsPage.getList()) { - if (rp.getPermissionId().equals(8L)) { /// 移动端数据塔台 - isInMobile = true; - } - } - } + isInMobile = mallUserRoleService.checkIsMobileAdmin(user); return isInMobile; } @ApiOperation("B端登录") @PostMapping("/bHidLogin") - public ResultData bLogin(@RequestBody MallUserInfo user) { + public ResultData bLogin(@RequestBody MallUserInfo user, HttpServletResponse response) { logger.debug("[" + getIpAddr() + "] HomeController::bHidLogin"); ResultData data = new ResultData(); + // tenantId is appId + if(StringUtils.isBlank(user.getTenantId())) { + logger.error("appid信息未提供"); + return new ResultData(ErrorCode.MALL_INFO_NOT_FOUND); + } + WxAppinfo appinfo = appinfoService.getByAppId(user.getTenantId()); + if(appinfo == null) { + logger.error("appid未找到"); + return new ResultData(ErrorCode.MALL_INFO_NOT_FOUND); + } if(StringUtils.isNotBlank(user.getPhone())) { // 领导登录 - user = mallUserInfoService.getByPhone(user.getPhone()); + user = mallUserInfoService.getByPhone(user.getPhone(), appinfo.getTenantId()); if(user == null || !isInMobileAdmin(user)) { - return new ResultData(ErrorCode.USER_NOT_ADMIN); + return new ResultData(ErrorCode.USER_NO_PERMISSION); } - } else if(StringUtils.isNotBlank(user.getOpenId())) { + } else if(StringUtils.isNotBlank(user.getBopenId())) { // 领导登录 - user = mallUserInfoService.getByOpenId(user.getOpenId()); + user = mallUserInfoService.getByBOpenId(user.getBopenId(), appinfo.getTenantId()); if(user == null || !isInMobileAdmin(user)) { - return new ResultData(ErrorCode.USER_NOT_ADMIN); + return new ResultData(ErrorCode.USER_NO_PERMISSION); } } else { if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword())) { // throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR); - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } } @@ -190,27 +204,128 @@ public class HomeController extends BaseController { Subject subject = SecurityUtils.getSubject(); UseriFormallToken token = new UseriFormallToken(user.getUsername()); subject.login(token); -// List roleList = sysRoleService.findRoleByUserId(user.getId()); -// if (null != roleList && roleList.size() > 0) { -// List permissionList = sysPermissionService -// .findPermissionByRoleIds(roleList.stream().map(MallRole::getId).collect(Collectors.toList())); -// user.setRole(roleList); -// user.setPermission(permissionList); -// } MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); info.setPassword("保密"); -// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId()); - String menus = getPermissionsByRole(info); + if(StringUtils.isNotBlank(info.getBopenId())) + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + } + String menus = mallUserRoleService.getPermissionsByUser(info); if(menus != null) { info.setMenus(menus); } + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + data.data = info; + } catch (MallinkException e) { + logger.error(e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_PASSWD_ERR); } return data; } + @GetMapping("sendLoginPhoneCode") + @ApiImplicitParams({ + @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)}) + public ResultData sendLoginPhoneCode(String phone) { + logger.debug("[" + getIpAddr() + "] HomeController::sendlogincode"); + // 1. 检查手机号是否在用户列表里, 是否只有一个 + // 2. 发送手机验证码, 直接发 + List users = mallUserInfoService.getUserByPhone(phone); + if(users.size() <= 0) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(users.size() > 1) { + logger.error(ErrorCode.USER_IS_MULTI.getMessage()); + return new ResultData(ErrorCode.USER_IS_MULTI); + } + MallUserInfoVo user = users.get(0); + if (user==null) { + logger.error("用户不存在, userName: " + user.getUsername()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){ + logger.error("用户已停用, userName: " + user.getUsername()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + wxMsgValidationcode.setPhone(phone); + wxMsgValidationcode.setTenantId(user.getTenantId()); + wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode()); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + } + + @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") + @PostMapping("/doLoginByPhone") + public ResultData doLoginByPhone(@RequestBody Map params, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] HomeController::doLoginByPhone"); + // String phone,String code,String pwd + String phone = params.get("phone"); + String code = params.get("code"); + + if (StringUtils.isBlank(phone)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空"); + } + if (StringUtils.isBlank(code)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); + } + + // 获取用户信息列表 + List userList = mallUserInfoService.getUserByPhone(phone); + if(userList.size() == 1) { + MallUserInfoVo user = userList.get(0); + // check 验证码正确 + boolean isValidCode = false; + try { + isValidCode = mallUserInfoService.checkCodeValid(user, code); + } catch (Exception e) { + return new ResultData(Result.ERROR, e.getMessage()); + } + if(isValidCode) { + // 验证码正确,直接登录 + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(user.getUsername()); + subject.login(token); + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.setPassword("保密"); + if(StringUtils.isNotBlank(info.getBopenId())) + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + } + String menus = mallUserRoleService.getPermissionsByUser(info); + if(menus != null) { + info.setMenus(menus); + } + + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + + return new ResultData(info); + } catch (MallinkException e) { + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return new ResultData(ErrorCode.USER_PASSWD_ERR); + } + } else { + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); + } + } else { + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + } + @ApiOperation("登出") @GetMapping("/logout") public ResultData logout() { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java index b5ed99604..a2f12bee9 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java @@ -5,9 +5,11 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.vo.MallUserInfoVo; import com.iformall.enums.EnumMallUserStatus; import com.iformall.enums.EnumUserAdmin; import com.iformall.enums.EnumFlowPermissionType; +import com.iformall.enums.EnumUserWechat; import com.iformall.service.*; import com.iformall.shiro.PasswordHelper; import com.iformall.shiro.UserSession; @@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; +import javax.print.DocFlavor; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -81,7 +84,12 @@ public class MallUserInfoController extends BaseController { u.setRoleId(role.getId()); } } - u.setPassword(null);//不返回密码 + // 保密 + u.setPassword(null); + u.setBopenId(null); + if(StringUtils.isNotBlank(u.getWebOpenId())) { + u.setWebOpenId("保密"); + } } return new ResultData(page); } @@ -91,6 +99,12 @@ public class MallUserInfoController extends BaseController { public ResultData detail(Long id) { logger.debug("[" + getIpAddr() + "] MallUserInfoController::detail"); final MallUserInfo user = userInfoService.getById(id); + user.setPassword(null); + user.setBopenId(null); + if(StringUtils.isNotBlank(user.getWebOpenId())) { + user.setWebOpenId("保密"); + } + return new ResultData(user); } @@ -103,10 +117,10 @@ public class MallUserInfoController extends BaseController { return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有超级管理员才能添加用户"); } - if(checkUniqueName(userInfo.getUsername(), currentUser.getTenantId()) > 0){ + if(checkUniqueName(userInfo.getUsername()) > 0){ return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); } - if(checkUniquePhone(userInfo.getPhone(), currentUser.getTenantId()) > 0){ + if(checkUniquePhone(userInfo.getPhone()) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } Assert.notNull(userInfo.getPassword(), "密码不能为空"); @@ -137,12 +151,12 @@ public class MallUserInfoController extends BaseController { } MallUserInfo oldUser = userInfoService.getById(userInfo.getId()); if (!oldUser.getUsername().equals(userInfo.getUsername())) { - if(checkUniqueName(userInfo.getUsername(), currentUser.getTenantId()) > 0){ + if(checkUniqueName(userInfo.getUsername()) > 0){ return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); } } if (!oldUser.getPhone().equals(userInfo.getPhone())) { - if(checkUniquePhone(userInfo.getPhone(), currentUser.getTenantId()) > 0){ + if(checkUniquePhone(userInfo.getPhone()) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } } @@ -211,36 +225,39 @@ public class MallUserInfoController extends BaseController { /** * 启用,停用用户 * - * @param userId - * @param status * @return */ - @ApiOperation(value = "起停用户接口", response = String.class) - @GetMapping("status") - public ResultData modifyStatus(Long userId, Integer status) { + @ApiOperation(value = "起停用户接口") + @PostMapping("updateStatus") + public ResultData modifyStatus(@RequestBody MallUserInfo userInfo) { logger.debug("[" + getIpAddr() + "] MallUserInfoController::modifyStatus"); MallUserInfo currentUser = getUser(); - if (currentUser.getIsAdmin().equals(EnumUserAdmin.Normal.getCode())) { - return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有超级管理员才能删除用户"); + if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { + MallUserInfo userInfo1 = userInfoService.getById(userInfo.getId()); + if(userInfo1 == null) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + MallUserInfo updateUserInfo = new MallUserInfo(); + updateUserInfo.setId(userInfo.getId()); + updateUserInfo.setTenantId(getTenantId()); + updateUserInfo.setStatus(userInfo.getStatus()); + userInfoService.saveOrUpdate(userInfo); + return new ResultData(); + } else { + return new ResultData(ErrorCode.USER_NO_PERMISSION); } - MallUserInfo userInfo = userInfoService.getById(userId); - userInfo.setStatus(status); - userInfo.setTenantId(getTenantId()); - userInfoService.saveOrUpdate(userInfo); - return new ResultData(userInfo); } - private int checkUniqueName(String userName, String tenantId) { + private int checkUniqueName(String userName) { MallUserInfo userQ = new MallUserInfo(); userQ.setUsername(userName); - userQ.setTenantId(tenantId); return userInfoService.cntUserList(userQ); } - private int checkUniquePhone(String phone, String tenantId) { + private int checkUniquePhone(String phone) { MallUserInfo userQ = new MallUserInfo(); userQ.setPhone(phone); - userQ.setTenantId(tenantId); return userInfoService.cntUserList(userQ); } @@ -392,4 +409,5 @@ public class MallUserInfoController extends BaseController { resultMap.put("billUserList",billUserList); return new ResultData(resultMap); } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java new file mode 100644 index 000000000..b6a3306a3 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java @@ -0,0 +1,338 @@ +package com.iformall.controller; + +import com.alibaba.fastjson.JSON; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.vo.MallUserInfoVo; +import com.iformall.enums.EnumUserAdmin; +import com.iformall.exception.MallinkException; +import com.iformall.service.MallUserInfoService; +import com.iformall.service.MallUserRoleService; +import com.iformall.shiro.UserSession; +import com.iformall.shiro.UseriFormallToken; +import com.iformall.utils.TOTP; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; +import me.chanjar.weixin.mp.bean.result.WxMpUser; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + + +@Controller +@RequestMapping("/wechat") +@Slf4j +public class WechatLoginController extends BaseController { + private String WECHAT_PREV = "OPEN-"; + + @Autowired + private WxMpService wxMpService; + + @Autowired + private MallUserInfoService mallUserInfoService; + + @Autowired + private MallUserRoleService mallUserRoleService; + + @Autowired + @Qualifier("openRedisTemplate") + RedisTemplate openRedisTemplate; + + @Data + private class DisplayUserInfo { + String mallName; + String userName; + String userRole; + } + + @ApiOperation(value = "微信网页登录回调", notes = "请配置此callback到网页redirect_uri") + @GetMapping("callback") + @ResponseBody + public void getAccessToken(String code, String state, HttpServletRequest request, HttpServletResponse response) { + log.debug("[" + getIpAddr() + "] WechatLoginController::getAccessToken"); + String host = request.getHeader("host"); + log.debug("host: " + host); + log.debug("code: " + code); + try { + WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); + log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); + + // 获取 用户信息 + WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null); + if(mpUser != null) { + log.debug(mpUser.toString()); + } + + // check user openid 是否是已授权用户 + List userList = mallUserInfoService.getUsersByWebOpenId(accessToken.getOpenId()); + log.info("login user list count " + userList.size()); + if(userList.size() > 0) { + if(userList.size() == 1) { + Map ret = new HashMap<>(); + // 唯一用户 + MallUserInfo user = userList.get(0); + boolean isLogin = false; + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(user.getUsername()); + subject.login(token); + isLogin = true; + } catch (UnknownAccountException e) { + log.error(e.getMessage()); + ret.put("code", ErrorCode.USER_IS_EMPTY.getCode()); + ret.put("message", e.getMessage()); + } catch (DisabledAccountException e) { + log.error(e.getMessage()); + ret.put("code", ErrorCode.USER_IS_LOCKED.getCode()); + ret.put("message", e.getMessage()); + } catch (Exception e) { + log.error(e.getMessage()); + ret.put("code", Result.ERROR); + ret.put("message", e.getMessage()); + } + if(isLogin) { + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.setPassword("保密"); + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + } + String menus = mallUserRoleService.getPermissionsByUser(info); + if(menus != null) { + info.setMenus(menus); + } + try { + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + } catch (Exception e) { + log.error(e.getMessage()); + ret.put("code", Result.ERROR); + ret.put("message", e.getMessage()); + } + Object codeObj = ret.get("code"); + if(codeObj == null) { + try { + response.sendRedirect("https://" + host + "/#/layout"); + } catch (Exception e) { + log.error(e.getMessage()); + } + } else { + try { + String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); + response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } else { + try { + String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); + response.sendRedirect("https://" + host + "/#/login?errcode="+errCode); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } else { + // 跳转登录选择页面 + String key = TOTP.generateWechatOpen(accessToken.getOpenId()); + if (openRedisTemplate.opsForValue().setIfAbsent(WECHAT_PREV + key, accessToken.getOpenId())){ + openRedisTemplate.expire(key, 30, TimeUnit.SECONDS); + } + List users = new ArrayList(); + for(MallUserInfoVo user: userList) { + DisplayUserInfo disUser = new DisplayUserInfo(); + disUser.setMallName(user.getMallName()); + disUser.setUserName(user.getUsername()); + disUser.setUserRole(user.getRoleName()); + users.add(disUser); + } + String usersStr = JSON.toJSONString(users); + log.info(usersStr); + try { + usersStr = URLEncoder.encode(usersStr, "utf-8"); + response.sendRedirect("https://" + host + "/#/loginselect?key=" + key + "&list=" + usersStr); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } else { + // 跳转登录页面 + Map ret = new HashMap<>(); + ret.put("code", ErrorCode.WECHAT_LOGIN_NOT_BIND.getCode()); + ret.put("message", ErrorCode.WECHAT_LOGIN_NOT_BIND.getMessage()); + try { + String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); + response.sendRedirect("https://" + host + "/#/login?errcode="+errCode); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + //return r; + } catch (WxErrorException e) { + log.error(e.getMessage()); + } + } + + @ApiOperation(value = "微信用户登录") + @GetMapping("weChatUserLogin") + @ApiImplicitParams({ + @ApiImplicitParam(name = "key", value = "key", dataType = "String", paramType = "query", required = true), + @ApiImplicitParam(name = "userName", value = "userName", dataType = "String", paramType = "query", required = true)}) + public ResultData weChatUserLogin(String key, String userName, HttpServletRequest request, HttpServletResponse response) { + log.debug("[" + getIpAddr() + "] MallUserInfoController::weChatUserLogin"); + String host = request.getHeader("host"); + log.debug("Host: " + host); + if(StringUtils.isBlank(userName)) { + log.error("请选择要登录的用户"); + return new ResultData(ErrorCode.WECHAT_LOGIN_USER_SELECT); + } + + String openKey = WECHAT_PREV + key; + // 限时时间内查找到此用户openId + if (openRedisTemplate.hasKey(WECHAT_PREV + key)){ + String openId = openRedisTemplate.opsForValue().get(openKey); + // 删除缓存 + openRedisTemplate.delete(openKey); + + MallUserInfo userInfo = mallUserInfoService.getByUsername(userName); + if(userInfo.getWebOpenId().equals(openId)) { + boolean isLogin = false; + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(userInfo.getUsername()); + subject.login(token); + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.setPassword("保密"); + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + } + String menus = mallUserRoleService.getPermissionsByUser(info); + if(menus != null) { + info.setMenus(menus); + } + // 登录cookie + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + + return new ResultData(); + } catch (UnknownAccountException e) { + log.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), e.getMessage()); + } catch (DisabledAccountException e) { + log.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED.getCode(), e.getMessage()); + } catch (Exception e) { + log.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } else { + // 登录失败 + log.error("微信登录失败,未找到对应的openId"); + return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME); + } + } + return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME); + } + + @ApiOperation(value = "微信第三方登录绑定", notes = "请配置此callback到网页redirect_uri") + @GetMapping("bindWebOpenId") + public void userBindWebOpenId(String code, String state, HttpServletRequest request, HttpServletResponse response) { + log.debug("[" + getIpAddr() + "] WechatLoginController::bindWebOpenId"); + String host = request.getHeader("host"); + String errCode = null; + try { + WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); + log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); + + // 获取 用户信息 + WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null); + if(mpUser != null) { + log.debug(mpUser.toString()); + } + + String uname = state; + MallUserInfo user = mallUserInfoService.getByUsername(uname); + if(user != null) { + user.setWebOpenId(accessToken.getOpenId()); + mallUserInfoService.updateWebOpenId(user); + log.debug("https://" + host + "/#/layout"); + response.sendRedirect("https://" + host + "/#/layout"); + } else { + log.debug("https://" + host + "/#/layout?errcode=绑定失败"); + errCode = URLEncoder.encode("绑定失败", "utf-8"); + response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); + } + } catch (WxErrorException e) { + log.error(e.getMessage()); + errCode = e.getMessage(); + } catch (IOException e) { + log.error(e.getMessage()); + errCode = e.getMessage(); + } + + if(StringUtils.isNotBlank(errCode)) { + try { + errCode = URLEncoder.encode(errCode, "utf-8"); + response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + } + + @ApiOperation(value = "微信第三方登录解绑", notes = "请配置此callback到网页redirect_uri") + @GetMapping("cleanWebOpenId") + public ResultData cleanWebOpenId(@ModelAttribute MallUserInfo userInfo) { + log.debug("[" + getIpAddr() + "] WechatLoginController::cleanWebOpenId"); + MallUserInfo user = getUser(); + if(userInfo == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if(StringUtils.isBlank(userInfo.getTenantId())) { + userInfo.setTenantId(user.getTenantId()); + } + if(userInfo.getId() == null && userInfo.getUsername() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + // 只有本人及超级管理员可以解绑微信 + if(userInfo.getId().equals(user.getId()) + || user.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { + mallUserInfoService.cleanWebOpenId(userInfo); + return new ResultData(); + } else { + return new ResultData(ErrorCode.USER_NO_PERMISSION); + } + + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java index d05366de0..d935fdbdb 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java @@ -75,12 +75,12 @@ public class WxAppinfoController extends BaseController { } - @ApiOperation("更新AccessToken, 无限制二维码生成需要更新token") + @ApiOperation("C端更新AccessToken, 无限制二维码生成需要更新token") @GetMapping("/accessTokenUpdate") - public ResultData tokenUpdate() { - logger.debug("[" + getIpAddr() + "] WxAppinfoController::tokenUpdate"); + public ResultData ctokenUpdate() { + logger.debug("[" + getIpAddr() + "] WxAppinfoController::ctokenUpdate"); try { - wxAppinfoService.tokenUpdate(getTenantId()); + wxAppinfoService.ctokenUpdate(getTenantId()); } catch (Exception e) { logger.error(e.getMessage()); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java index 10cc3940f..89be25512 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java @@ -49,5 +49,13 @@ public class WxBillAllController extends BaseController wxBillAllService.exportBill(request,response,wxBillAll); } + @GetMapping("getBillInfo") + public ResultData getBillInfo(@ModelAttribute WxBillAll wxBillAll) { + wxBillAll.setTenantId(getTenantId()); + Object billInfo = wxBillAllService.getBillInfo(wxBillAll); + return new ResultData(billInfo); + } + + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java index 3a65f0a5e..42269299d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java @@ -76,5 +76,19 @@ public class WxBillDepositController extends BaseController { return wxBillDepositService.updatePaid(id); } + @PostMapping("returnDeposit") + public ResultData returnDeposit(@RequestBody WxBillDeposit wxBillDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillDepositController::returnDeposit"); + return wxBillDepositService.returnDeposit(wxBillDeposit); + + } + + @PostMapping("adjustDeposit") + public ResultData adjustDeposit(@RequestBody WxBillDeposit wxBillDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillDepositController::adjustDeposit"); + return wxBillDepositService.adjustDeposit(wxBillDeposit); + + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java index 22b60fc5e..8cb3a99fe 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java @@ -76,5 +76,18 @@ public class WxBillOtherDepositController extends BaseController { return wxBillOtherDepositService.updatePaid(id); } + @PostMapping("returnDeposit") + public ResultData returnDeposit(@RequestBody WxBillOtherDeposit wxBillDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::returnDeposit"); + return wxBillOtherDepositService.returnDeposit(wxBillDeposit); + + } + + @PostMapping("adjustDeposit") + public ResultData adjustDeposit(@RequestBody WxBillOtherDeposit wxBillDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::adjustDeposit"); + return wxBillOtherDepositService.adjustDeposit(wxBillDeposit); + + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java index a3fbe8d50..fc7a4f291 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java @@ -35,6 +35,7 @@ public class WxBillPropertyController extends BaseController { wxBillProperty = new WxBillProperty(); } wxBillProperty.setTenantId(getTenantId()); + wxBillProperty.setSortColumns(WxBillProperty.Field.Id_DESC); PageInfo> result = wxBillPropertyService.listAsPage(wxBillProperty, pageNum, pageSize); return new ResultData(result); } @@ -76,5 +77,21 @@ public class WxBillPropertyController extends BaseController { return wxBillPropertyService.updatePaid(id); } + @GetMapping("/detail") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData detail(Long id) { + logger.debug("[" + getIpAddr() + "] WxBillPropertyController::detail"); + return new ResultData(Result.SUCCESS, "查询成功", wxBillPropertyService.detail(id)); + } + @GetMapping("/findByPropertyContractId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "propertyContractId", value = "merchantId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findByPropertyContractId(Long propertyContractId, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillPropertyController::findByPropertyContractId"); + final PageInfo> page = wxBillPropertyService.findByPropertyContractId(propertyContractId, getTenantId(), pageNum, pageSize); + return new ResultData(page); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java index f039fbf67..42e63b6cc 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyDepositController.java @@ -3,6 +3,7 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillOtherDeposit; import com.iformall.domain.po.WxBillPropertyDeposit; import com.iformall.service.WxBillPropertyDepositService; import io.swagger.annotations.ApiImplicitParam; @@ -51,8 +52,7 @@ public class WxBillPropertyDepositController extends BaseController @PostMapping("update") public ResultData update(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::update"); - wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit); - return new ResultData(); + return wxBillPropertyDepositService.saveOrUpdate(wxBillPropertyDeposit); } @GetMapping("/del") @@ -76,6 +76,22 @@ public class WxBillPropertyDepositController extends BaseController logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::updatePaid"); return wxBillPropertyDepositService.updatePaid(id); } - + + @PostMapping("returnDeposit") + public ResultData returnDeposit(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::returnDeposit"); + return wxBillPropertyDepositService.returnDeposit(wxBillPropertyDeposit); + + } + + + @PostMapping("adjustDeposit") + public ResultData adjustDeposit(@RequestBody WxBillPropertyDeposit wxBillPropertyDeposit) { + logger.debug("[" + getIpAddr() + "] WxBillPropertyDepositController::adjustDeposit"); + return wxBillPropertyDepositService.adjustDeposit(wxBillPropertyDeposit); + + } + + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java index dc10f7ca4..e01979027 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillRentController.java @@ -68,11 +68,15 @@ public class WxBillRentController extends BaseController { return new ResultData(Result.SUCCESS, "查询成功", wxBillRentService.getById(id)); } - @GetMapping("/findByMerchantId") - @ApiImplicitParam(name = "merchantId", value = "merchantId", dataType = "Long", paramType = "query", required = true) - public ResultData findByMerchantId(Long merchantId) { - logger.debug("[" + getIpAddr() + "] WxBillRentController::findByMerchantId"); - return new ResultData(Result.SUCCESS, "查询成功", wxBillRentService.findByMerchantId(merchantId)); + @GetMapping("/findByRentContractId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "rentContractId", value = "merchantId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findByRentContractId(Long rentContractId, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxBillRentController::findByRentContractId"); + final PageInfo> page = wxBillRentService.findByRentContractId(rentContractId, getTenantId(), pageNum, pageSize); + return new ResultData(page); } @GetMapping("/updatePaid") @@ -82,4 +86,18 @@ public class WxBillRentController extends BaseController { return wxBillRentService.updatePaid(id); } + @GetMapping("/detail") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData detail(Long id) { + logger.debug("[" + getIpAddr() + "] WxBillRentController::detail"); + return new ResultData(Result.SUCCESS, "查询成功", wxBillRentService.detail(id)); + } + + + @PostMapping("updateRevenue") + public ResultData updateRevenue(@RequestBody WxBillRent wxBillRent) { + logger.debug("[" + getIpAddr() + "] WxBillRentController::updateRevenue"); + return wxBillRentService.updateRevenue(wxBillRent); + } + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java index a1afc0446..d9b5be5de 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCUserBasicInfoController.java @@ -218,7 +218,7 @@ public class WxCUserBasicInfoController extends BaseController { public ResultData findOrderCouponByUserId(Long userId, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCUserBasicInfoController::findOrderCouponByUserId"); WxCouponOrder corder = new WxCouponOrder(); - corder.setCUserId(userId); + corder.setcUserId(userId); corder.setTenantId(getTenantId()); corder.setSortColumns(CreateDate_DESC); PageInfo page = wxCouponOrderService.listAsPage(corder, pageNum, pageSize); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java index 5f4a90463..f3d2eaa70 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java @@ -51,7 +51,7 @@ public class WxCardPayController extends BaseController { @Autowired WxCardSpendService wxCardSpendService; - @ApiOperation("售卡记录列表接口") + @ApiOperation("售卡记录列表分页接口") @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java new file mode 100644 index 000000000..f2df6a49b --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java @@ -0,0 +1,42 @@ +package com.iformall.controller; + +import com.iformall.common.ResultData; +import com.iformall.service.WxChartDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@Api(description = "图表") +@RestController +@RequestMapping("chart") +public class WxChartDataController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxChartDataService wxChartDataService; + + @ApiOperation("queryData") + @GetMapping("/queryData") + @ApiImplicitParams({ + @ApiImplicitParam(name = "chart", value = "chart", dataType = "String", paramType = "query", required = true), + @ApiImplicitParam(name = "startdate", value = "startdate", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "enddate", value = "enddate", dataType = "String", paramType = "query") + }) + public ResultData queryData(@RequestParam Map params) { + logger.debug("[" + getIpAddr() + "] WxChartDataController::queryData"); + params.put("tenantId",super.getTenantId()); + return wxChartDataService.queryData(params); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java index 863dfea50..b7e9bfefa 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponChannelController.java @@ -39,6 +39,7 @@ public class WxCouponChannelController extends BaseController { @Autowired private WxCouponService wxCouponService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -62,31 +63,8 @@ public class WxCouponChannelController extends BaseController { public ResultData update(@RequestBody WxCouponChannel wxCouponChannel) { logger.debug("[" + getIpAddr() + "] WxCouponChannelController::update"); wxCouponChannel.setTenantId(getUser().getTenantId()); - if (wxCouponChannel.getCouponId() != null && wxCouponChannel.getStatus() != null) { - WxCouponChannel orignal = wxCouponChannelService.getById(wxCouponChannel.getId()); - if (orignal.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) - && wxCouponChannel.getStatus().equals(EnumCouponChannelStatus.STATUS_THROW_IN.getCode())) { - - WxCoupon wxCoupon = wxCouponService.getById(orignal.getCouponId()); - if (wxCoupon == null) - return new ResultData(ErrorCode.COUPON_IS_EMPTY); - if (wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF)) - return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); - - //查找是否该券 在该频道有其他上架 - WxCouponChannel query = new WxCouponChannel(); - query.setTenantId(orignal.getTenantId()); - query.setCouponId(orignal.getCouponId()); - query.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode());//已上架 - query.setTargetAd(orignal.getTargetAd()); - List list = wxCouponChannelService.listAsPage(query, 1, 1).getList(); - if (list != null && list.size() > 0) { - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_EXISTED); - } - } - } - wxCouponChannelService.saveOrUpdate(wxCouponChannel); - return new ResultData(); + + return wxCouponChannelService.saveOrUpdate(wxCouponChannel); } @ApiOperation("根据id删除接口") diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java index ad50854f7..515aba748 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponController.java @@ -1,34 +1,22 @@ package com.iformall.controller; -import com.alibaba.fastjson.JSON; -import com.github.pagehelper.PageInfo; -import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.po.WxMerchant; -import com.iformall.enums.EnumCouponStatus; -import com.iformall.enums.EnumCouponType; -import com.iformall.enums.EnumCouponValidType; -import com.iformall.enums.EnumMerchantStatus; -import com.iformall.service.WxCouponChannelService; +import com.iformall.enums.*; import com.iformall.service.WxCouponService; -import com.iformall.service.WxMerchantService; +import com.iformall.utils.DateUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import java.text.SimpleDateFormat; +import java.util.*; @RestController @RequestMapping("wxCoupon") @@ -39,58 +27,6 @@ public class WxCouponController extends BaseController { @Autowired private WxCouponService wxCouponService; - @Autowired - private WxCouponChannelService wxCouponChannelService; - - private ResultData listType(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize, Integer type) { - if (null == wxCoupon) wxCoupon = new WxCoupon(); - wxCoupon.setTenantId(getTenantId()); - wxCoupon.setSortColumns(WxCoupon.Field.Id_DESC); - PageInfo page = null; - if (wxCoupon.getStatus() != null && wxCoupon.getStatus() == -1) - wxCoupon.setStatus(null); - page = wxCouponService.listAsPage(wxCoupon, pageNum, pageSize, type); - - List wxCouponList = page.getList(); - - if (wxCouponList.isEmpty()) { - return new ResultData(page); - } - - List ids = wxCouponList.stream().map(p -> p.getId()).collect(Collectors.toList()); - WxCouponChannel wxCouponChannel = new WxCouponChannel(); - wxCouponChannel.setTenantId(getTenantId()); - wxCouponChannel.setCouponIds(ids); - wxCouponChannel.setStatus(0); - //上架状态 - List list = wxCouponChannelService.listAsPage(wxCouponChannel, 1, 10000).getList(); - if (!list.isEmpty()) { - Map> groupBy = list.stream().collect(Collectors.groupingBy(WxCouponChannel::getCouponId)); - for (WxCoupon temp : wxCouponList) { - - if (groupBy.get(temp.getId()) != null) { - List channels = new ArrayList<>(); - for (WxCouponChannel tempchannel : groupBy.get(temp.getId())) { - if (!channels.contains(tempchannel.getTargetAd())) { - channels.add(tempchannel.getTargetAd()); - } - } - String sss = JSON.toJSONString(channels); - temp.setChannels(sss); - } else { - temp.setChannels(""); - } - - } - } else { - for (WxCoupon temp : wxCouponList) { - temp.setChannels(""); - } - - } - return new ResultData(page); - } - @ApiOperation("分页列表接口") @GetMapping("listCoupon") @@ -99,7 +35,9 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) public ResultData listCoupon(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCouponController::listCoupon"); - return listType(wxCoupon, pageNum, pageSize, 0); //券列表 + if (wxCoupon == null) wxCoupon = new WxCoupon(); + wxCoupon.setTenantId(getTenantId()); + return wxCouponService.listType(wxCoupon, pageNum, pageSize, 0); //券列表 } @ApiOperation("卡分页列表接口") @@ -109,7 +47,9 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) public ResultData listCard(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCouponController::listCard"); - return listType(wxCoupon, pageNum, pageSize, EnumCouponType.CARD_MULTIMCH.getCode()); //卡列表 + if (wxCoupon == null) wxCoupon = new WxCoupon(); + wxCoupon.setTenantId(getTenantId()); + return wxCouponService.listType(wxCoupon, pageNum, pageSize, EnumCouponType.CARD_MULTIMCH.getCode()); //卡列表 } @ApiOperation("砍价分页列表接口") @@ -119,7 +59,9 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) public ResultData listPress(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCouponController::listPress"); - return listType(wxCoupon, pageNum, pageSize, EnumCouponType.COUPON_PRESS.getCode()); //砍价列表 + if (wxCoupon == null) wxCoupon = new WxCoupon(); + wxCoupon.setTenantId(getTenantId()); + return wxCouponService.listType(wxCoupon, pageNum, pageSize, EnumCouponType.COUPON_PRESS.getCode()); //砍价列表 } @ApiOperation("分页列表接口") @@ -129,7 +71,9 @@ public class WxCouponController extends BaseController { @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) public ResultData list(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCouponController::list"); - return listType(wxCoupon, pageNum, pageSize, null); //全列表 + if (wxCoupon == null) wxCoupon = new WxCoupon(); + wxCoupon.setTenantId(getTenantId()); + return wxCouponService.listType(wxCoupon, pageNum, pageSize, null); //全列表 } @ApiOperation("新增接口") @@ -166,4 +110,75 @@ public class WxCouponController extends BaseController { logger.debug("[" + getIpAddr() + "] WxCouponController::findById");; return new ResultData(wxCouponService.getVoById(id)); } + + @ApiOperation("卡类列表接口") + @GetMapping("findList") + public ResultData findList(@ModelAttribute WxCoupon wxCoupon) { + return new ResultData(wxCouponService.list(wxCoupon)); + } + + @ApiOperation("卡营销列表接口") + @GetMapping("findCardCountList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findCardCountList(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { + //默认时间本月第一天,截止到当天 + Map result = new HashedMap(); + if(wxCoupon.getStartdate() == null){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + } + if(wxCoupon.getEnddate() == null){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + } + result.put("list",wxCouponService.findCountData(wxCoupon,pageNum,pageSize)); + return new ResultData(result); + } + + @ApiOperation("卷营销列表接口") + @GetMapping("findCouponCountList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findCouponCountList(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { + //默认时间本月第一天,截止到当天 + Map result = new HashedMap(); + if(wxCoupon.getStartdate() == null){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + } + if(wxCoupon.getEnddate() == null){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + } + return new ResultData(wxCouponService.findCouponData(wxCoupon,pageNum,pageSize)); + } + + @ApiOperation("砍价营销列表接口") + @GetMapping("findPressCountList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData findPressCountList(@ModelAttribute WxCoupon wxCoupon, Integer pageNum, Integer pageSize) { + //默认时间本月第一天,截止到当天 + Map result = new HashedMap(); + if(wxCoupon.getStartdate() == null){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + } + if(wxCoupon.getEnddate() == null){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + } + return new ResultData(wxCouponService.findPressData(wxCoupon,pageNum,pageSize)); + } + + + + } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponSendController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponSendController.java index 311adfd4a..43597b8c2 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponSendController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCouponSendController.java @@ -62,13 +62,7 @@ public class WxCouponSendController extends BaseController { if (null == wxCouponSend) { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } - wxCouponSend.setTenantId(getTenantId()); - wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); - List wxCouponSendList = wxCouponSendService.listAsPage(wxCouponSend, 1, 1).getList(); - if (wxCouponSendList != null && wxCouponSendList.size() > 0) { - return new ResultData(ErrorCode.COUPON_SEND_IS_EXISTED); - } - + WxCoupon wxCoupon = wxCouponService.getById(wxCouponSend.getCouponId()); if (!wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()) ){ return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceController.java new file mode 100644 index 000000000..bdd04a1ad --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceController.java @@ -0,0 +1,97 @@ +package com.iformall.controller; + +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; + +import com.iformall.domain.po.WxDevice; +import com.iformall.enums.EnumDeviceOnlineStatus; +import com.iformall.enums.EnumDeviceStatus; +import com.iformall.service.WxDeviceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("wxDevice") +@Api(description="IOT设备") +public class WxDeviceController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxDeviceService wxDeviceService; + + + @ApiOperation("设备列表") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public Result list(@ModelAttribute WxDevice wxDevice, Integer pageNum, Integer pageSize) { + wxDevice.setTenantId(getTenantId()); + wxDevice.setStatus(EnumDeviceStatus.VALID.getCode()); + return new ResultData(wxDeviceService.listAsPage(wxDevice, pageNum,pageSize)); + } + + @ApiOperation("添加设备") + @PostMapping("add") + public Result add(@RequestBody WxDevice wxDevice) { + + WxDevice record = new WxDevice(); + record.setDeviceId(wxDevice.getDeviceId()); + record.setStatus(EnumDeviceStatus.VALID.getCode()); + List list = wxDeviceService.findList(record); + if (list.size() > 0) + return new ResultData(ErrorCode.DEVICE_ALREADY_EXIST); + wxDevice.setStatus(EnumDeviceStatus.VALID.getCode()); + wxDevice.setOnlineStatus(EnumDeviceOnlineStatus.OFFLINE.getCode()); + wxDevice.setTenantId(getTenantId()); + wxDeviceService.saveOrUpdate(wxDevice); + return new ResultData(); + } + + @ApiOperation("更新设备") + @PostMapping("update") + public Result update(@RequestBody WxDevice wxDevice) { + if (wxDevice == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + if (wxDevice.getId() == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + wxDevice.setTenantId(getTenantId()); + wxDeviceService.saveOrUpdate(wxDevice); + return new ResultData(); + } + + @ApiOperation("设备详情") + @GetMapping("detail") + public Result detail(@RequestParam Long id) { + if (id == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + WxDevice wxDevice = wxDeviceService.getById(id); + if (wxDevice == null) + return new ResultData(ErrorCode.SCREENAD_NOT_FOUND); + + return new ResultData(wxDevice); + } + + @ApiOperation("删除设备") + @PostMapping("delete") + public Result delete(@RequestParam Long id) { + if (id == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + WxDevice wxDevice = new WxDevice(); + wxDevice.setId(id); + wxDevice.setTenantId(getTenantId()); + wxDevice.setStatus(EnumDeviceStatus.INVALID.getCode()); + wxDeviceService.saveOrUpdate(wxDevice); + return new ResultData(); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceScreenAdController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceScreenAdController.java new file mode 100644 index 000000000..afc554af7 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxDeviceScreenAdController.java @@ -0,0 +1,110 @@ +package com.iformall.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxDevice; +import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxScreenAd; +import com.iformall.enums.EnumScreenAdStatus; +import com.iformall.enums.EnumScreenAdType; +import com.iformall.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("wxDeviceScreenAd") +@Api(description="广告屏") +public class WxDeviceScreenAdController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxScreenAdService wxScreenAdService; + + @Autowired + private WxMallService wxMallService; + + @Autowired + private WxDeviceService wxDeviceService; + + @Autowired + private WxCampaignService wxCampaignService; + + @Autowired + private WxCouponChannelService wxCouponChannelService; + + + private WxDevice findDevice(String deviceId) + { + WxDevice wxDevice = new WxDevice(); + wxDevice.setDeviceId(deviceId); + wxDevice.setStatus(EnumScreenAdStatus.VALID.getCode()); + List list = wxDeviceService.findList(wxDevice); + if (list.size() <= 0) + return null; + else + return list.get(0); + } + + + @ApiOperation("广告列表") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public Result list(@RequestParam String deviceId, Integer pageNum, Integer pageSize) { + + WxDevice wxDevice = findDevice(deviceId); + if (wxDevice == null) + return new ResultData(ErrorCode.DEVICE_NOT_FOUND); + WxScreenAd wxScreenAd = new WxScreenAd(); + wxScreenAd.setTenantId(wxDevice.getTenantId()); + wxScreenAd.setStatus(EnumScreenAdStatus.VALID.getCode()); + PageInfo page = wxScreenAdService.listAsPage(wxScreenAd,pageNum,pageSize); + page.getList().stream().forEach(s->{ + Object target = null; + if (s.getType().equals(EnumScreenAdType.COUPON.getCode())) + target = wxCouponChannelService.findDetailVo(s.getTargetId()); + else if (s.getType().equals(EnumScreenAdType.CAMPAIGN.getCode())) + target = wxCampaignService.getById(s.getTargetId()); + s.setTarget(target); + }); + return new ResultData(page); + } + + @ApiOperation("心跳") + @PostMapping("heartbeat") + public Result heartbeat(@RequestParam String deviceId,@RequestBody Map paramMap) { + WxDevice wxDevice = findDevice(deviceId); + if (wxDevice == null) + return new ResultData(ErrorCode.DEVICE_NOT_FOUND); + if (wxDevice.getFirstHbTime() == null) + wxDevice.setFirstHbTime(new Date()); + wxDevice.setLastHbTime(new Date()); + wxDevice.setVersion(paramMap.get("version")); + wxDeviceService.saveOrUpdate(wxDevice); + return new ResultData(wxDevice); + } + + @ApiOperation("基础信息") + @GetMapping("info") + public Result info(@RequestParam String deviceId) { + WxDevice wxDevice = findDevice(deviceId); + if (wxDevice == null) + return new ResultData(ErrorCode.DEVICE_NOT_FOUND); + return new ResultData(wxMallService.getByTenantId(wxDevice.getTenantId())); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java index 3f5e1e473..7bbcd197d 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxFlowAbleController.java @@ -1,11 +1,15 @@ package com.iformall.controller; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUserTags; +import com.iformall.domain.po.WxFlowRecord; +import com.iformall.enums.EnumFlowRecordStatus; import com.iformall.service.WxFlowService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.flowable.engine.RuntimeService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +25,8 @@ public class WxFlowAbleController extends BaseController { @Autowired private WxFlowService wxFlowService; + @Autowired + RuntimeService runtimeService; @ApiOperation(value = "启动流程",notes = "{\"businessId\":\"221178539888607232\",\"businessType\":1,\"remark\":\"意见意见。\",\"taskAssignee\":[{\"taskKey\":\"firstTaskUser\",\"assignee\":\"243650055783841792\"},{\"taskKey\":\"secondTaskUser\",\"assignee\":\"\"}],\"variables\":[{\"key\":\"contractType\",\"value\":\"1\"},{\"key\":\"contractNumber\",\"value\":\"1111\"}]}") @PostMapping("/start") @@ -29,6 +35,12 @@ public class WxFlowAbleController extends BaseController { return wxFlowService.start(params,super.getUser().getId(),super.getUser().getName(),super.getTenantId()); } + @GetMapping(value = "/del") + public ResultData list(String id) { + runtimeService.deleteProcessInstance(id, "驳回"); + return new ResultData(); + } + /** * 用户代办列表 */ @@ -37,13 +49,30 @@ public class WxFlowAbleController extends BaseController { @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), - @ApiImplicitParam(name = "flowType", value = "流程类型,1合同流程 2账单流程", dataType = "int", paramType = "query", required = true) + @ApiImplicitParam(name = "flowType", value = "流程类型,1合同流程 2账单流程", dataType = "string", paramType = "query", required = true) }) - public ResultData list(Integer flowType,Integer pageNum, Integer pageSize) { + public ResultData list(String flowType,Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] FlowAbleController::list"); return wxFlowService.list(flowType,pageNum,pageSize,super.getUser().getId()); } + /** + * 我的申请列表 + */ + @ApiOperation("我的申请列表") + @GetMapping(value = "/myApplyList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData myApplyList(@ModelAttribute WxFlowRecord record, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] FlowAbleController::myApplyList"); + record.setUserId(super.getUser().getId()); + record.setStatus(EnumFlowRecordStatus.NEW.getCode()); + return new ResultData(wxFlowService.listAsPage(record,pageNum,pageSize)); + } + + /** * 审批历史 */ @@ -84,10 +113,20 @@ public class WxFlowAbleController extends BaseController { */ @ApiOperation(value = "驳回",notes = "{\"taskId\":\"\",\"processInstanceId\":\"\",\"remark\":\"\"}") @PostMapping(value = "reject") - public ResultData reject(@RequestBody Map params) { + public ResultData reject(@RequestBody Map params) { return wxFlowService.reject(params,super.getUser().getId(),super.getUser().getName(),super.getTenantId()); } + + /** + * 撤回 + */ + @ApiOperation(value = "撤回",notes = "{\"taskId\":\"\",\"processInstanceId\":\"\",\"remark\":\"\"}") + @PostMapping(value = "setBack") + public ResultData setBack(@RequestBody Map params) { + return wxFlowService.setBack(params,super.getUser().getId(),super.getUser().getName()); + } + /** * 生成流程图 * diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderGroupController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderGroupController.java new file mode 100644 index 000000000..e517069df --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxOrderGroupController.java @@ -0,0 +1,40 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.vo.WxOrderGroupMarketing; +import com.iformall.service.WxOrderGroupService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/orderGroup") +@Api(description = "拼团接口") +public class WxOrderGroupController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxOrderGroupService wxOrderGroupService; + + @ApiOperation(value = "拼团营销分析") + @GetMapping("queryOrderGroupMarketingList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData queryOrderGroupMarketingList(@ModelAttribute WxOrderGroupMarketing wxOrderGroupMarketing, Integer pageNum, Integer pageSize) { + final PageInfo page = wxOrderGroupService.queryOrderGroupMarketingList(wxOrderGroupMarketing, pageNum, pageSize); + return new ResultData(page); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxPropertyContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxPropertyContractController.java index 82e3acd96..277adcca4 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxPropertyContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxPropertyContractController.java @@ -2,10 +2,16 @@ package com.iformall.controller; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxFlowRecord; import com.iformall.domain.po.WxPropertyContract; +import com.iformall.domain.po.WxRentContract; +import com.iformall.enums.EnumFlowRecordStatus; +import com.iformall.service.WxBillPropertyService; import com.iformall.service.WxPropertyContractService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,10 +26,11 @@ import java.util.Map; */ @RestController @RequestMapping("wxPropertyContract") -public class WxPropertyContractController extends BaseController -{ +public class WxPropertyContractController extends BaseController { @Autowired private WxPropertyContractService wxPropertyContractService; + @Autowired + private WxBillPropertyService wxBillPropertyService; private Logger logger = LoggerFactory.getLogger(WxPropertyContractController.class); @@ -67,6 +74,9 @@ public class WxPropertyContractController extends BaseController @ApiImplicitParam(name="id",value="id",dataType="Long", paramType = "query",required=true) public ResultData findById(Long id) { logger.debug("[" + getIpAddr() + "] WxPropertyContractController::findById"); + WxBillProperty wxBillProperty = new WxBillProperty(); + wxBillProperty.setTenantId(super.getTenantId()); + wxBillPropertyService.updateBillStatus(wxBillProperty); return wxPropertyContractService.getById(id); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java index eb080c6bd..f5cb2e7ad 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxRentContractController.java @@ -2,7 +2,9 @@ package com.iformall.controller; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillRent; import com.iformall.domain.po.WxRentContract; +import com.iformall.service.WxBillRentService; import com.iformall.service.WxRentContractService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -25,6 +27,8 @@ public class WxRentContractController extends BaseController { @Autowired private WxRentContractService wxRentContractService; + @Autowired + private WxBillRentService wxBillRentService; @GetMapping("list") @ApiImplicitParams({ @@ -79,6 +83,10 @@ public class WxRentContractController extends BaseController { @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) public ResultData findById(Long id) { logger.debug("[" + getIpAddr() + "] WxRentContractController::findById"); + // 同步欠缴状态 + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setTenantId(super.getTenantId()); + wxBillRentService.updateBillStatus(wxBillRent); return wxRentContractService.getById(id); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxScreenAdController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxScreenAdController.java new file mode 100644 index 000000000..dbc06a917 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxScreenAdController.java @@ -0,0 +1,109 @@ +package com.iformall.controller; + +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCampaign; +import com.iformall.domain.po.WxScreenAd; +import com.iformall.enums.EnumScoreType; +import com.iformall.enums.EnumScreenAdStatus; +import com.iformall.enums.EnumScreenAdType; +import com.iformall.service.WxCampaignService; +import com.iformall.service.WxCouponChannelService; +import com.iformall.service.WxScreenAdService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("wxScreenAd") +@Api(description="广告屏") +public class WxScreenAdController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxScreenAdService wxScreenAdService; + + @Autowired + private WxCampaignService wxCampaignService; + + @Autowired + private WxCouponChannelService wxCouponChannelService; + + + @ApiOperation("广告列表") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public Result list(@ModelAttribute WxScreenAd wxScreenAd, Integer pageNum, Integer pageSize) { + if (wxScreenAd == null) wxScreenAd = new WxScreenAd(); + wxScreenAd.setTenantId(getTenantId()); + wxScreenAd.setStatus(EnumScreenAdStatus.VALID.getCode()); + return new ResultData(wxScreenAdService.listAsPage(wxScreenAd,pageNum,pageSize)); + } + + @ApiOperation("添加广告") + @PostMapping("add") + public Result add(@RequestBody WxScreenAd wxScreenAd) { + if (wxScreenAd == null) wxScreenAd = new WxScreenAd(); + wxScreenAd.setStatus(EnumScreenAdStatus.VALID.getCode()); + wxScreenAd.setTenantId(getTenantId()); + return wxScreenAdService.saveOrUpdate(wxScreenAd); + } + + @ApiOperation("更新广告") + @PostMapping("update") + public Result update(@RequestBody WxScreenAd wxScreenAd) { + if (wxScreenAd == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + if (wxScreenAd.getId() == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + wxScreenAd.setTenantId(getTenantId()); + wxScreenAdService.saveOrUpdate(wxScreenAd); + return new ResultData(); + } + + @ApiOperation("广告详情") + @GetMapping("detail") + public Result detail(@RequestParam Long id) { + if (id == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + WxScreenAd wxScreenAd = wxScreenAdService.getById(id); + if (wxScreenAd == null) + return new ResultData(ErrorCode.SCREENAD_NOT_FOUND); + + Object target = null; + if (wxScreenAd.getType().equals(EnumScreenAdType.COUPON.getCode())) + target = wxCouponChannelService.findDetailVo(wxScreenAd.getTargetId()); + if (wxScreenAd.getType().equals(EnumScreenAdType.COUPON.getCode())) + target = wxCampaignService.getById(wxScreenAd.getTargetId()); + + wxScreenAd.setTarget(target); + return new ResultData(wxScreenAd); + } + + @ApiOperation("删除广告") + @PostMapping("delete") + public Result delete(@RequestParam Long id) { + if (id == null) + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + WxScreenAd wxScreenAd = new WxScreenAd(); + wxScreenAd.setId(id); + wxScreenAd.setTenantId(getTenantId()); + wxScreenAd.setStatus(EnumScreenAdStatus.INVALID.getCode()); + wxScreenAdService.saveOrUpdate(wxScreenAd); + return new ResultData(); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java index 08209bfa1..882226518 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxShopController.java @@ -3,16 +3,20 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxShop; import com.iformall.service.WxShopService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Map; /** @@ -119,4 +123,19 @@ public class WxShopController extends BaseController { return new ResultData(page); } + @ApiOperation("导出店铺") + @GetMapping("/exportShop") + public void exportShop(@ModelAttribute WxShop wxShop, HttpServletRequest request, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] WxShopController::exportShop"); + if (null == wxShop){ + wxShop = new WxShop(); + } + wxShop.setTenantId(getTenantId()); + wxShop.setSortColumns(WxShop.Field.Id_DESC); + wxShopService.exportShop(wxShop, request, response); + } + + + + } diff --git a/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java index fd3d41f9f..e36fb40e4 100644 --- a/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkAdmin/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -77,7 +77,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request: " + HashUtil.md5(sb.toString()); + String key = "request-" + HashUtil.md5(sb.toString()); if (redisTemplate.opsForValue().setIfAbsent(key, key)) { redisTemplate.expire(key, 3, TimeUnit.SECONDS); logger.info(key + ": 第一次提交"); diff --git a/mallinkAdmin/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java b/mallinkAdmin/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java index 14630d6af..e71e52c61 100644 --- a/mallinkAdmin/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java +++ b/mallinkAdmin/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java @@ -1,18 +1,39 @@ package com.iformall.shiro; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.MallUserInfo; import com.iformall.enums.EnumLoginType; +import com.iformall.enums.EnumMallUserStatus; +import com.iformall.service.MallUserInfoService; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.springframework.context.annotation.Configuration; +import javax.annotation.Resource; + @Configuration public class MyRetryLimitCredentialsMatcher extends HashedCredentialsMatcher { + @Resource + private MallUserInfoService userService; + @Override public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) { if(authcToken instanceof UseriFormallToken) { UseriFormallToken tk = (UseriFormallToken) authcToken; if(tk.getType().equals(EnumLoginType.NOPASSWD)){ + // 获取用户的输入的账号. + String username = (String)tk.getPrincipal(); + MallUserInfo user = userService.getByUsername(username); + if(user == null) { + throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage()); + } + // 用户被禁用 + if(user.getStatus()==null ||!EnumMallUserStatus.VALID.getCode().equals(user.getStatus())) { + throw new DisabledAccountException(ErrorCode.USER_IS_LOCKED.getMessage()); + } return true; } boolean matches = super.doCredentialsMatch(authcToken, info); diff --git a/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java b/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java index 67e519c1c..c221fd175 100644 --- a/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java +++ b/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java @@ -2,14 +2,12 @@ package com.iformall.shiro; import javax.annotation.Resource; +import com.iformall.common.ErrorCode; import com.iformall.enums.EnumMallUserStatus; +import com.iformall.exception.MallinkException; import com.iformall.service.MallUserInfoService; import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.AuthenticationInfo; -import org.apache.shiro.authc.AuthenticationToken; -import org.apache.shiro.authc.SimpleAuthenticationInfo; -import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; @@ -53,14 +51,11 @@ public class MyShiroRealm extends AuthorizingRealm { String username = (String)token.getPrincipal(); MallUserInfo user = userService.getByUsername(username); if(user == null) { - throw new UnknownAccountException("用户名不存在"); + throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage()); } -// if (0==user.getEnable()) { -// throw new LockedAccountException(); // 帐号锁定 -// } if(user.getStatus()==null || !EnumMallUserStatus.VALID.getCode().equals(user.getStatus())) {//用户被禁用 - throw new UnknownAccountException("用户被禁用"); + throw new DisabledAccountException(ErrorCode.USER_IS_LOCKED.getMessage()); } SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( user, //用户 diff --git a/mallinkAdmin/src/main/resources/application-dev.yml b/mallinkAdmin/src/main/resources/application-dev.yml index 11c340efb..67b288c92 100644 --- a/mallinkAdmin/src/main/resources/application-dev.yml +++ b/mallinkAdmin/src/main/resources/application-dev.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rabbitMQ # JDBC datasource: - url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) type: com.alibaba.druid.pool.DruidDataSource @@ -22,9 +24,6 @@ spring: connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" #jackson: #date-format: yyyy-MM-dd HH:mm:ss - flowable: - async-executor-activate: false - # REDIS redis: host: 202.165.179.86 @@ -51,12 +50,37 @@ spring: auth: true starttls: enable: true + # ROCKETMQ + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + # RABBITMQ + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: fumao + password: f8l89&*%%u7f1t22 + publisher-confirms: true + virtual-host: / + aws: clientRegion: cn-northwest-1 bucketName: iformall-net access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) +wechat: + web: + appId: "wxe31beafbfd8295ba" + secret: "c689fabf3c4c9f5b6424ff2a36a26727" + url: "https://mall.youlane.cn" + jasypt: encryptor: password: oRqdnDbK5pj3eMmB diff --git a/mallinkAdmin/src/main/resources/application-prod.yml b/mallinkAdmin/src/main/resources/application-prod.yml index 6a7ae47a9..ffd8ecb68 100644 --- a/mallinkAdmin/src/main/resources/application-prod.yml +++ b/mallinkAdmin/src/main/resources/application-prod.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rocketMQ # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) type: com.alibaba.druid.pool.DruidDataSource @@ -46,8 +48,14 @@ spring: auth: true starttls: enable: true - flowable: - async-executor-activate: false + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 @@ -55,6 +63,12 @@ aws: access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) +wechat: + web: + appId: "wx9cc4ca09eb20fe03" + secret: "af1d7f7a1268022a73cb4ce0b9cf0985" + url: "https://admin.malls.iformall.com" + fm: exception: true diff --git a/mallinkAdmin/src/main/resources/application-test.yml b/mallinkAdmin/src/main/resources/application-test.yml index 95614d338..0c245d0ca 100644 --- a/mallinkAdmin/src/main/resources/application-test.yml +++ b/mallinkAdmin/src/main/resources/application-test.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rocketMQ # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(Uc0AjgkytxHHCwZrmDASWg==) password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) type: com.alibaba.druid.pool.DruidDataSource @@ -46,8 +48,14 @@ spring: auth: true starttls: enable: true - flowable: - async-executor-activate: false + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 @@ -55,6 +63,11 @@ aws: access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) +wechat: + web: + appId: "wx091907dd0bfd3f6b" + secret: "2a2ca10738998b9ef92c1fe8a4d366a6" + url: "https://admintest.malls.iformall.com" fm: exception: true diff --git a/mallinkAdmin/src/main/resources/application.yml b/mallinkAdmin/src/main/resources/application.yml index b7a2d6448..7c87e991b 100644 --- a/mallinkAdmin/src/main/resources/application.yml +++ b/mallinkAdmin/src/main/resources/application.yml @@ -21,6 +21,26 @@ spring: cache-names: redis_cache #缓存的名字(可以不指定) redis: time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) + rocketmq: + nameServer: 202.165.179.86:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: guest + password: guest + publisher-confirms: true + virtual-host: / + # FLOWABLE + flowable: + async-executor-activate: false + # @{link} https://github.com/abel533 #Mybatis diff --git a/mallinkAdmin/src/main/resources/processes/endContractflow.bpmn20.xml b/mallinkAdmin/src/main/resources/processes/endContractflow.bpmn20.xml new file mode 100644 index 000000000..9fe8beae0 --- /dev/null +++ b/mallinkAdmin/src/main/resources/processes/endContractflow.bpmn20.xml @@ -0,0 +1,45 @@ + + + + 终止合同审批流程 + + + 初审 + + + + + + + 复审 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/BApplication.java b/mallinkBApi/src/main/java/com/iformall/BApplication.java index ef3c776ba..0dabd6ccc 100644 --- a/mallinkBApi/src/main/java/com/iformall/BApplication.java +++ b/mallinkBApi/src/main/java/com/iformall/BApplication.java @@ -1,6 +1,7 @@ package com.iformall; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -14,6 +15,7 @@ import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableEncryptableProperties +@EnableRocketMQ public class BApplication { @Value("${fm.exception}") diff --git a/mallinkBApi/src/main/java/com/iformall/config/RedisConfig.java b/mallinkBApi/src/main/java/com/iformall/config/RedisConfig.java index f02a38fb8..e337f083e 100644 --- a/mallinkBApi/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkBApi/src/main/java/com/iformall/config/RedisConfig.java @@ -1,6 +1,7 @@ package com.iformall.config; import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxScoreRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,4 +87,21 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 0b588dd19..6ce0fdbae 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -5,6 +5,9 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.enums.EnumCouponChannelActivityStatus; +import com.iformall.enums.EnumCouponOrderValidStatus; import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponOrderService; import io.swagger.annotations.Api; @@ -17,6 +20,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.Map; @RestController @@ -99,7 +103,7 @@ public class WxCouponOrderController extends BaseController { @ApiOperation(value = "核销接口", notes = "{\"couponOrderId\":\"string\"}") @PostMapping("verify") public ResultData verify(@RequestBody Map paramMap) { - logger.info(paramMap.toString()); + logger.info("couponOrderController.verify:"+paramMap.toString()); String couponOrderIdStr = paramMap.get("couponOrderId"); if (StringUtils.isBlank(couponOrderIdStr)) { logger.error("couponOrderId不能为空: " + paramMap.toString()); @@ -113,6 +117,25 @@ public class WxCouponOrderController extends BaseController { logger.error("couponOrderId参数不正确: " + paramMap.toString()); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } + + WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderService.detailCUserVo(couponOrderIdStr); + + if (wxCouponOrderCVo == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + + + if (wxCouponOrderCVo.getValidStartDate() != null && wxCouponOrderCVo.getValidEndDate() != null ) { + Date now = new Date(); + if (wxCouponOrderCVo.getValidStartDate().getTime() > now.getTime()) { + logger.error("此券有效期未开始:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getValidEndDate().getTime() < now.getTime()) { + logger.error("此券有效期已结束:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + } + WxCouponOrder couponOrder = null; try { couponOrder = wxCouponOrderService.verify(couponOrderId, getUser().getId()); @@ -152,7 +175,7 @@ public class WxCouponOrderController extends BaseController { try { wxCouponOrderService.sendVerifyMsg(couponOrder, getUser(), bSentCoupon); } catch (Exception e) { - logger.error(e.getMessage()); + logger.error("核销发送消息发生错误:"+e.getMessage()); } } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java index b8281f827..1036b433e 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxInfoController.java @@ -86,15 +86,17 @@ public class WxInfoController extends BaseController { if (StringUtils.isBlank(code)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "code不能为空"); } + + WxAppinfo wxAppinfo = getAppInfo(appId); try { Map retMap = getOpenIdInfo(appId, code); String openId = retMap.get("openId"); - MallUserInfo user = mallUserInfoService.getByOpenId(openId); + MallUserInfo user = mallUserInfoService.getByBOpenId(openId, wxAppinfo.getTenantId()); if(user == null) { return new ResultData(ErrorCode.USER_NO_PERMISSION, retMap); } - if(!isInMobileAdmin(user)) { + if(!mallUserRoleService.checkIsMobileAdmin(user)) { return new ResultData(ErrorCode.USER_NO_PERMISSION, retMap); } @@ -107,31 +109,6 @@ public class WxInfoController extends BaseController { } } - private boolean isInMobileAdmin(MallUserInfo user) { - // 检查用户是否有 移动端数据塔台 权限 - boolean isInMobile = false; - if(EnumUserAdmin.ADMIN.getCode().equals(user.getIsAdmin())) { // 超管 - isInMobile = true; - return isInMobile; - } - MallUserRole ur = new MallUserRole(); - ur.setUid(user.getId()); - PageInfo page = mallUserRoleService.listAsPage(ur, 1, 1); - if (page.getSize() > 0) { - Long roleId = page.getList().get(0).getRoleId(); - MallRolePermission p = new MallRolePermission(); - p.setRoleId(roleId); - p.setTenantId(user.getTenantId()); - PageInfo listAsPage = mallRolePermissionService.listAsPage(p, 1, 100); - for (MallRolePermission rp : listAsPage.getList()) { - if (rp.getPermissionId().equals(8L)) { /// 移动端数据塔台 - isInMobile = true; - } - } - } - return isInMobile; - } - private Map getOpenIdInfo(String appId, String code) { WxAppinfo wxAppinfo = getAppInfo(appId); WxMaService wxMaService = getWeappServiceByAppInfo(wxAppinfo); @@ -218,6 +195,8 @@ public class WxInfoController extends BaseController { } WxMaService wxMaService = getWeappService(appId); + + WxAppinfo wxAppinfo = getAppInfo(appId); try { // 解密 WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session_key, encryptedData, iv); @@ -226,15 +205,15 @@ public class WxInfoController extends BaseController { String phone = phoneNoInfo.getPhoneNumber(); resultMap.put("phone", phone); - MallUserInfo user = mallUserInfoService.getByPhone(phone); + MallUserInfo user = mallUserInfoService.getByPhone(phone, wxAppinfo.getTenantId()); if(user == null) { return new ResultData(ErrorCode.USER_NO_PERMISSION, resultMap); } - if (isInMobileAdmin(user)) { + if (mallUserRoleService.checkIsMobileAdmin(user)) { resultMap.put("phone", user.getPhone()); resultMap.put("admin", "1"); - user.setOpenId(openId); + user.setBopenId(openId); mallUserInfoService.saveOrUpdate(user); return new ResultData(resultMap); diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java index 9e50e26e1..668975ee3 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java @@ -5,11 +5,11 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.config.PayProperty; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxRefundOrder; +import com.iformall.domain.po.*; import com.iformall.enums.EnumPayType; import com.iformall.exception.MallinkException; +import com.iformall.service.WxCouponOrderService; +import com.iformall.service.WxOrderService; import com.iformall.service.WxRefundOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index 375576763..2af9d1b15 100644 --- a/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkBApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -69,7 +69,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request: " + HashUtil.md5(sb.toString()); + String key = "request-" + HashUtil.md5(sb.toString()); if (redisTemplate.opsForValue().setIfAbsent(key, key)) { redisTemplate.expire(key, 3, TimeUnit.SECONDS); logger.info(key + ": 第一次提交"); diff --git a/mallinkBApi/src/main/resources/application-dev.yml b/mallinkBApi/src/main/resources/application-dev.yml index 737b9d17b..cde001b8b 100644 --- a/mallinkBApi/src/main/resources/application-dev.yml +++ b/mallinkBApi/src/main/resources/application-dev.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rabbitMQ # JDBC datasource: - url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) type: com.alibaba.druid.pool.DruidDataSource diff --git a/mallinkBApi/src/main/resources/application-prod.yml b/mallinkBApi/src/main/resources/application-prod.yml index db4aba906..a40833cbe 100644 --- a/mallinkBApi/src/main/resources/application-prod.yml +++ b/mallinkBApi/src/main/resources/application-prod.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rocketMQ # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) type: com.alibaba.druid.pool.DruidDataSource @@ -45,6 +47,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkBApi/src/main/resources/application-test.yml b/mallinkBApi/src/main/resources/application-test.yml index 26f6f0ede..f378ae640 100644 --- a/mallinkBApi/src/main/resources/application-test.yml +++ b/mallinkBApi/src/main/resources/application-test.yml @@ -1,7 +1,7 @@ spring: # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(Uc0AjgkytxHHCwZrmDASWg==) password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) type: com.alibaba.druid.pool.DruidDataSource @@ -45,6 +45,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkBApi/src/main/resources/application.yml b/mallinkBApi/src/main/resources/application.yml index 0e4588f52..c54a63361 100644 --- a/mallinkBApi/src/main/resources/application.yml +++ b/mallinkBApi/src/main/resources/application.yml @@ -12,6 +12,15 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 # @{link} https://github.com/abel533 #Mybatis diff --git a/mallinkCApi/src/main/java/com/iformall/CApplication.java b/mallinkCApi/src/main/java/com/iformall/CApplication.java index eca6c85b2..d2717e841 100644 --- a/mallinkCApi/src/main/java/com/iformall/CApplication.java +++ b/mallinkCApi/src/main/java/com/iformall/CApplication.java @@ -1,6 +1,7 @@ package com.iformall; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -14,6 +15,7 @@ import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableEncryptableProperties +@EnableRocketMQ public class CApplication { @Value("${fm.exception}") diff --git a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java index f02a38fb8..e337f083e 100644 --- a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java @@ -1,6 +1,7 @@ package com.iformall.config; import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxScoreRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,4 +87,21 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 57fafc1ca..6baef18b3 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -645,7 +645,7 @@ public class WxCarController extends BaseController { WxCouponOrderCarCVo userCar = null; WxCouponOrder userCarQ = new WxCouponOrder(); userCarQ.setTenantId(user.getTenantId()); - userCarQ.setCUserId(user.getId()); + userCarQ.setcUserId(user.getId()); userCarQ.setId(couponOrderId); userCarQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); List list = wxCouponOrderService.carListCUserVo(userCarQ); @@ -712,7 +712,7 @@ public class WxCarController extends BaseController { if (wxCouponOrder == null) wxCouponOrder = new WxCouponOrderCarCVo(); WxCUser user = getUser(); wxCouponOrder.setTenantId(user.getTenantId()); - wxCouponOrder.setCUserId(user.getId()); + wxCouponOrder.setcUserId(user.getId()); if (wxCouponOrder.getCouponOrderStatus() == null) wxCouponOrder.setSortColumns(WxCouponOrder.Field.CreateDate_DESC); else if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java index 32fffeb88..456d18642 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -45,6 +45,9 @@ public class WxCardPayController extends BaseController { @Autowired WxCardSpendService wxCardSpendService; + @Autowired + WxCouponOrderService wxCouponOrderService; + @ApiOperation(value = "C端扫B端储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"merchantId\":\"String\",\"totalFee\":\"String(元)\"}") @PostMapping("order_create") public ResultData saveCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { @@ -87,6 +90,8 @@ public class WxCardPayController extends BaseController { Integer payment = totalFee.multiply(new BigDecimal(100)).intValue(); + WxCUser user = getUser(); + WxCardInfo cardInfo = wxCardInfoService.getById(cardId); if(cardInfo == null) { logger.error("卡不存在: " + cardIdStr); @@ -98,14 +103,19 @@ public class WxCardPayController extends BaseController { return new ResultData(ErrorCode.CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH); } + //查看所有者与扫码者是否为一致 + WxCouponOrder couponOrder = wxCouponOrderService.getById(cardId); + if (!couponOrder.getOwnerId().equals(user.getId())) { + logger.error("卡已被领取: " + cardIdStr); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } + WxCouponMerchant couponMerchant = wxCardSpendService.checkMerchantInCoupon(cardInfo, merchantId); if(couponMerchant == null) { logger.error("商户不支持此卡 " + cardIdStr); return new ResultData(ErrorCode.COUPON_ORDER_MERANT_IS_NULL.getCode(), "商户不支持此卡"); } - WxCUser user = getUser(); - WxMerchant merchant = wxMerchantService.getById(merchantId); if (merchant.getStatus() == EnumMerchantStatus.NOT_VALID.getCode()) { logger.error("商户已禁用, merchantId: " + merchant.getId()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java index 084368025..97e7bb0e2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponChannelController.java @@ -1,6 +1,10 @@ package com.iformall.controller; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.vo.WxCouponChannelVo; +import com.iformall.enums.EnumCouponChannelActivityStatus; import com.iformall.enums.EnumCouponChannelStatus; +import com.iformall.enums.EnumCouponChannelType; import io.swagger.annotations.Api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +19,8 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import java.util.Date; + @RestController @RequestMapping("/api/wxCouponChannel") @Api(description = "发券渠道相关接口") @@ -34,20 +40,25 @@ public class WxCouponChannelController extends BaseController { wxCouponChannel.setTenantId(getTenantId()); wxCouponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); wxCouponChannel.setSortColumns(WxCouponChannel.Field.CreateDate_DESC); - wxCouponChannel.setIsCRequest(0);//标记为C端调用 - return new ResultData(wxCouponChannelService.listPageCVo(wxCouponChannel, pageNum, pageSize)); - } - @ApiOperation("分页列表接口") - @GetMapping("getCouponChannel") - public ResultData getCouponChannel(@ModelAttribute WxCouponChannel wxCouponChannel) { - if (null == wxCouponChannel) wxCouponChannel = new WxCouponChannel(); - wxCouponChannel.setTenantId(getTenantId()); - wxCouponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); - wxCouponChannel.setIsCRequest(0);//标记为C端调用 - return new ResultData(wxCouponChannelService.findCouponChannelVo(wxCouponChannel)); - } + PageInfo page = wxCouponChannelService.listPageCVo(wxCouponChannel, pageNum, pageSize); + + if (wxCouponChannel.getTargetAd()!= null && + wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { + Date now = new Date(); + page.getList().stream().forEach(cc->{ + if (cc.getBeginTime().getTime() > now.getTime()) { + cc.setActivityStatus(EnumCouponChannelActivityStatus.PREPARED.getCode()); + } else if (cc.getEndTime().getTime() < now.getTime()) { + cc.setActivityStatus(EnumCouponChannelActivityStatus.ENDED.getCode()); + } else { + cc.setActivityStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + }); + } + return new ResultData(page); + } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java index 71f9eea20..96861c671 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponController.java @@ -2,22 +2,31 @@ package com.iformall.controller; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.vo.MarkingSceneDataReportVo; import com.iformall.domain.vo.WxCouponCVo; +import com.iformall.enums.EnumCouponChannelActivityStatus; +import com.iformall.enums.EnumCouponChannelType; import com.iformall.service.WxCouponChannelService; - +import com.iformall.service.WxCouponService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + @RestController @RequestMapping("/api/wxCoupon") @Api(description = "券类型相关接口") @@ -26,6 +35,8 @@ public class WxCouponController extends BaseController { @Autowired private WxCouponChannelService wxCouponChannelService; + @Autowired + private WxCouponService wxCouponService; @ApiOperation("根据id(couponChannel)查询接口") @@ -48,7 +59,19 @@ public class WxCouponController extends BaseController { if (wxCouponCVo == null) return new ResultData(ErrorCode.COUPON_IS_EMPTY); - return new ResultData(wxCouponCVo); + if (wxCouponCVo.getTargetAd()!= null && + wxCouponCVo.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { + Date now = new Date(); + if (wxCouponCVo.getBeginTime().getTime() > now.getTime()) { + wxCouponCVo.setActivityStatus(EnumCouponChannelActivityStatus.PREPARED.getCode()); + } else if (wxCouponCVo.getEndTime().getTime() < now.getTime()) { + wxCouponCVo.setActivityStatus(EnumCouponChannelActivityStatus.ENDED.getCode()); + } else { + wxCouponCVo.setActivityStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + + return new ResultData(wxCouponCVo); } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index f8db06064..72e01beb5 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -1,12 +1,16 @@ package com.iformall.controller; +import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.vo.WxCardCVo; import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.enums.EnumCouponChannelActivityStatus; import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumCouponOrderValidStatus; +import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -16,15 +20,10 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @RestController @RequestMapping("/api/couponOrder") @@ -35,6 +34,9 @@ public class WxCouponOrderController extends BaseController { @Autowired private WxCouponOrderService wxCouponOrderService; + @Autowired + StringRedisTemplate stringRedisTemplate; + @ApiOperation("券包分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -47,14 +49,30 @@ public class WxCouponOrderController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } if (wxCouponOrder == null) wxCouponOrder = new WxCouponOrderCVo(); - wxCouponOrder.setCUserId(getUser().getId()); + wxCouponOrder.setcUserId(getUser().getId()); if (wxCouponOrder.getCouponOrderStatus() == null) wxCouponOrder.setSortColumns(WxCouponOrder.Field.CreateDate_DESC); else if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()) wxCouponOrder.setSortColumns(WxCouponOrder.Field.CreateDate_DESC); else wxCouponOrder.setSortColumns(WxCouponOrder.Field.UpdateDate_DESC); - return wxCouponOrderService.listCUserVoAsPage(wxCouponOrder, pageNum, pageSize); + + PageInfo page = wxCouponOrderService.listCUserVoAsPage(wxCouponOrder, pageNum, pageSize); + + Date now = new Date(); + page.getList().stream().forEach(co->{ + if (co.getValidStartDate() != null && co.getValidEndDate() != null ) { + if (co.getValidStartDate().getTime() > now.getTime()) { + co.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (co.getValidEndDate().getTime() < now.getTime()) { + co.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + co.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + }); + + return new ResultData(page); } @ApiOperation(value = "券详情接口") @@ -67,8 +85,27 @@ public class WxCouponOrderController extends BaseController { if (couponOrderId == null) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } + WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderService.detailCUserVo(couponOrderId); + + if (wxCouponOrderCVo == null) { + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } - return wxCouponOrderService.detailCUserVo(getUser().getId(), couponOrderId); + if (!wxCouponOrderCVo.getcUserId().equals(getUserId())) { + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + Date now = new Date(); + if (wxCouponOrderCVo.getValidStartDate() != null && wxCouponOrderCVo.getValidEndDate() != null ) { + if (wxCouponOrderCVo.getValidStartDate().getTime() > now.getTime()) { + wxCouponOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (wxCouponOrderCVo.getValidEndDate().getTime() < now.getTime()) { + wxCouponOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + wxCouponOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + + return new ResultData(wxCouponOrderCVo); } @ApiOperation(value = "卡券状态接口") @@ -137,4 +174,57 @@ public class WxCouponOrderController extends BaseController { return wxCouponOrderService.cardDetailCUserVo(getUserId(), couponOrderId); } + + @ApiOperation(value = "卡转赠领取") + @PostMapping("cardAccept") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "coupon_order_id", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "cUserId", value = "转赠者", dataType = "Long", paramType = "query", required = true), + }) + public ResultData cardAccept(@RequestBody WxCouponOrder wxCouponOrder) { + //coupon_order_id判断 + Long id = wxCouponOrder.getId(); + if (id == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); + } + //转赠人判断 + Long cUserId = wxCouponOrder.getcUserId(); + if (cUserId == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + //当前领取人 + wxCouponOrder.setOwnerId(getUserId()); + //转赠者与当前领取人是否为同一个 + if (cUserId.equals(wxCouponOrder.getOwnerId())) { + logger.info("转赠人与卡所有者相同"); + return new ResultData(ErrorCode.CARD_TRANSFER_INVALID.getCode(), "转赠人与卡所有者相同"); + } + + return wxCouponOrderService.cardAccept(wxCouponOrder); + + } + + @ApiOperation(value = "查询转赠卡状态") + @GetMapping("queryCardStatus") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "coupon_order_id", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "cUserId", value = "转赠者", dataType = "Long", paramType = "query", required = true), + }) + public ResultData queryCardStatus(@ModelAttribute WxCouponOrder wxCouponOrder) { + + //coupon_order_id判断 + Long id = wxCouponOrder.getId(); + if (id == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); + } + //转赠人判断 + Long cUserId = wxCouponOrder.getcUserId(); + if (cUserId == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + //当前领取人 + wxCouponOrder.setOwnerId(getUserId()); + return wxCouponOrderService.queryCardStatus(wxCouponOrder); + } + } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java index e1119fe71..15e9b487f 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxGameController.java @@ -55,40 +55,26 @@ public class WxGameController extends BaseController { @PostMapping("addActionLog") @ApiImplicitParams({ @ApiImplicitParam(name = "gameId", value = "游戏ID", dataType = "String", paramType = "query", required = true), - @ApiImplicitParam(name = "couponOrderId", value = "券ID", dataType = "String", paramType = "query", required = true)}) - public ResultData addActionLog(String gameId, String orderId) { + @ApiImplicitParam(name = "orderId", value = "券订单ID", dataType = "String", paramType = "query", required = true)}) + public ResultData addActionLog(@RequestBody Map paramMap) { Long gameIdL = null; Long orderIdL = null; - Long couponOrderIdL = null; + try { - gameIdL = Long.valueOf(gameId); - if (orderId != null) { - orderIdL = Long.valueOf(orderId); - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setCUserId(getUserId()); - wxCouponOrder.setOrderId(orderIdL); - PageInfo page = wxCouponOrderService.listAsPage(wxCouponOrder,1,1); - if (page.getList().size()>0) { - couponOrderIdL = page.getList().get(0).getId(); - } - } + gameIdL = Long.valueOf(paramMap.get("gameId")); + orderIdL = Long.valueOf(paramMap.get("orderId")); } catch (Exception e){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } - WxGameActionLog wxGameActionLog = new WxGameActionLog(); - wxGameActionLog.setUserId(getUserId()); - wxGameActionLog.setTenantId(getTenantId()); - wxGameActionLog.setGameId(gameIdL); - wxGameActionLog.setCouponOrderId(couponOrderIdL); - wxGameService.addActionLog(wxGameActionLog); - return new ResultData(); + + return wxGameService.addActionLog(getUserId(), gameIdL, orderIdL); } @ApiOperation("添加游戏参与记录") - @PostMapping("checkLimit") + @GetMapping("getCount") @ApiImplicitParams({ @ApiImplicitParam(name = "gameId", value = "游戏ID", dataType = "String", paramType = "query", required = true)}) - public ResultData checkLimit(String gameId) { + public ResultData getCount(String gameId) { Long gameIdL = null; try { gameIdL = Long.valueOf(gameId); @@ -96,6 +82,6 @@ public class WxGameController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); } - return wxGameService.checkLimit(gameIdL,getUserId()); + return wxGameService.getCount(gameIdL,getUserId()); } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxMerchantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxMerchantController.java index 8ea4f39ad..a6dc15c12 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxMerchantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxMerchantController.java @@ -1,11 +1,15 @@ package com.iformall.controller; +import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMerchant; import com.iformall.domain.vo.WxMerchantVo; +import com.iformall.enums.EnumMerchantStatus; import com.iformall.service.WxMerchantService; import com.iformall.utils.HashUtil; import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -26,6 +30,17 @@ public class WxMerchantController extends BaseController { @Autowired private WxMerchantService wxMerchantService; + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute WxMerchantVo wxMerchant, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] WxMerchantController::list"); + if (null == wxMerchant) wxMerchant = new WxMerchantVo(); + wxMerchant.setMerchantStatus(EnumMerchantStatus.VALID.getCode()); + return new ResultData(wxMerchantService.listAsPageCVo(wxMerchant, pageNum, pageSize)); + } @ApiOperation("根据code查询接口") @GetMapping("/findByCode") diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 39d186bfd..aa45be246 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -9,11 +9,11 @@ import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxOrder; import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; -import com.iformall.enums.EnumCouponChannelStatus; -import com.iformall.enums.EnumOrderStatus; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxOrderService; +import com.iformall.utils.DateUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -24,7 +24,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; +import java.util.Date; import java.util.Map; @RestController @@ -85,7 +85,7 @@ public class WxOrderController extends BaseController { } } - @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\"}") + @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\"}") @PostMapping("save") public ResultData saveOrder(@RequestBody Map paramMap) { logger.info("OrderSave: " + paramMap.toString()); @@ -94,11 +94,12 @@ public class WxOrderController extends BaseController { String couponChannelIdStr = paramMap.get("couponChannelId"); String couponIdStr = paramMap.get("couponId"); String pressStr = paramMap.get("press"); + String orderGroupIdStr = paramMap.get("orderGroupId"); if (StringUtils.isBlank(couponChannelIdStr)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空"); } - Long couponChannelId = 0L, couponId = 0L; + Long couponChannelId = 0L, couponId = 0L, orderGroupId = null; boolean isPress = false; if (StringUtils.isNotBlank(couponChannelIdStr)) { @@ -111,11 +112,24 @@ public class WxOrderController extends BaseController { WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(couponChannelId); if (wxCouponChannel == null) { logger.error("couponChannelId convert error, " + couponChannelIdStr); - return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "找不到发布的频道"); + return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR); + } + + if (wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) { + Date now = new Date(); + if (wxCouponChannel.getBeginTime().getTime() > now.getTime()) { + logger.error("此券活动未开始:" + couponChannelIdStr); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_NOT_STARTED); + } + if (wxCouponChannel.getEndTime().getTime() < now.getTime()) { + logger.error("此券活动已结束:" + couponChannelIdStr); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_END); + } } + if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) { logger.error("此券已下架:" + couponChannelIdStr); - return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF.getCode(), "此券已下架"); + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF); } if (StringUtils.isBlank(couponIdStr)) { couponId = wxCouponChannel.getCouponId(); @@ -143,10 +157,17 @@ public class WxOrderController extends BaseController { } } - WxCUser user = getUser(); + if (orderGroupIdStr != null) { + try { + orderGroupId = Long.valueOf(orderGroupIdStr); + } catch (Exception e) { + logger.error("orderGroupId转换失败"); + } + } + WxCUser user = getUser(); try { - WxOrder order = wxOrderService.saveCouponOrder(user, couponChannelId, couponId, isPress); + WxOrder order = wxOrderService.saveCouponOrder(user, couponChannelId, couponId, isPress, orderGroupId); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); @@ -228,6 +249,21 @@ public class WxOrderController extends BaseController { wxOrder.setcUserId(getUser().getId()); wxOrder.setSortColumns(WxOrder.Field.UpdateDate_DESC); final PageInfo page = wxOrderService.listCUserVoAsPage(wxOrder, pageNum, pageSize); + + Date now = new Date(); + page.getList().stream().forEach(oc->{ + if (oc.getValidStartDate() != null && oc.getValidEndDate() != null ) { + if (oc.getValidStartDate().getTime() > now.getTime()) { + oc.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (oc.getValidEndDate().getTime() < now.getTime()) { + oc.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + oc.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + }); + + return new ResultData(page); } @@ -251,6 +287,19 @@ public class WxOrderController extends BaseController { WxOrderCouponVo wxOrderCVo = wxOrderService.detailCUserVo(wxOrder); if (wxOrderCVo == null) return new ResultData(ErrorCode.ORDER_IS_NOT_FIND); + + Date now = new Date(); + + if (wxOrderCVo.getValidStartDate() != null && wxOrderCVo.getValidEndDate() != null ) { + if (wxOrderCVo.getValidStartDate().getTime() > now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode()); + } else if (wxOrderCVo.getValidEndDate().getTime() < now.getTime()) { + wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode()); + } else { + wxOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode()); + } + } + return new ResultData(wxOrderCVo); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java new file mode 100644 index 000000000..dcc600da4 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderGroupController.java @@ -0,0 +1,138 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxOrderGroup; +import com.iformall.domain.vo.WxOrderGroupMarketing; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.service.WxCouponService; +import com.iformall.service.WxOrderGroupService; +import com.iformall.service.WxOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api/orderGroup") +@Api(description = "拼团接口") +public class WxOrderGroupController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxOrderService wxOrderService; + + @Autowired + WxCouponService wxCouponService; + + @Autowired + WxOrderGroupService wxOrderGroupService; + + + @ApiOperation(value = "查询差1个的团购信息") + @GetMapping("queryRemainOne") + @ApiImplicitParams({ + @ApiImplicitParam(name = "couponId", value = "券ID", dataType = "Long", paramType = "query", required = true) + }) + public ResultData queryRemainOne(@ModelAttribute WxOrderGroup wxOrderGroup) { + if (wxOrderGroup.getCouponId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponId不能为空"); + } + wxOrderGroup.setRemainPeople(1); + wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); + wxOrderGroup.setTenantId(getTenantId()); + return wxOrderGroupService.queryRemainOne(wxOrderGroup, getUserId()); + } + + + @ApiOperation(value = "我的拼团") + @GetMapping("queryOrderGroup") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData queryOrderGroup(Integer pageNum, Integer pageSize) { + WxOrder wxOrder = new WxOrder(); + wxOrder.setCUserId(getUserId()); + wxOrder.setTenantId(getTenantId()); + final PageInfo> page = wxOrderGroupService.queryOrderGroup(wxOrder, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation(value = "去拼团") + @PostMapping("toOrderGroup") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderId", value = "orderId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), + }) + public ResultData toOrderGroup(@RequestBody WxOrderGroup wxOrderGroup) { + if (wxOrderGroup.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); + } + if (wxOrderGroup.getCouponId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponId不能为空"); + } + if (wxOrderGroup.getOrderId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); + } + wxOrderGroup.setTenantId(getTenantId()); + return wxOrderGroupService.toOrderGroup(wxOrderGroup); + } + + @ApiOperation(value = "查询拼团状态") + @GetMapping("queryOrderGroupStatus") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderId", value = "orderId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), + }) + public ResultData queryOrderGroupStatus(@ModelAttribute WxOrderGroup wxOrderGroup) { + if (wxOrderGroup.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); + } + if (wxOrderGroup.getCouponId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponId不能为空"); + } + if (wxOrderGroup.getOrderId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空"); + } + wxOrderGroup.setTenantId(getTenantId()); + return wxOrderGroupService.queryOrderGroupStatus(wxOrderGroup); + } + + @ApiOperation(value = "查询是否已参团") + @GetMapping("queryAttendStatus") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), + }) + public ResultData queryAttendStatus(@ModelAttribute WxOrderGroup wxOrderGroup) { + if (wxOrderGroup.getId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id不能为空"); + } + wxOrderGroup.setUserId(getUserId()); + wxOrderGroup.setTenantId(getTenantId()); + return wxOrderGroupService.queryAttendStatus(wxOrderGroup); + } + + @ApiOperation(value = "拼团营销分析") + @GetMapping("queryOrderGroupMarketingList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "couponId", value = "couponId", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), + }) + public ResultData queryOrderGroupMarketingList(@ModelAttribute WxOrderGroupMarketing wxOrderGroupMarketing, Integer pageNum, Integer pageSize) { + final PageInfo page = wxOrderGroupService.queryOrderGroupMarketingList(wxOrderGroupMarketing, pageNum, pageSize); + return new ResultData(page); + } + +} diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 23fdc2345..c81982470 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -7,10 +7,13 @@ import com.iformall.common.ResultData; import com.iformall.config.PayProperty; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumPayWay; import com.iformall.exception.MallinkException; +import com.iformall.service.WxCouponService; +import com.iformall.service.WxOrderService; import com.iformall.service.WxPayOrderService; import com.iformall.utils.IPUtil; import io.swagger.annotations.Api; @@ -38,6 +41,12 @@ public class WxPayOrderController extends BaseController { @Autowired private WxPayOrderService wxPayOrderService; + @Autowired + private WxOrderService wxOrderService; + + @Autowired + private WxCouponService wxCouponService; + @ApiOperation(value = "发起微信小程序支付订单", notes = "{\"orderId\":\"string\"}") @RequestMapping(value = "/create", method = RequestMethod.POST) public ResultData _create(@RequestBody Map paramMap, HttpServletRequest request) throws Exception { @@ -108,13 +117,17 @@ public class WxPayOrderController extends BaseController { payOrder.setOrderId(orderId); payOrder.setPayOrderStatus(status); payOrder.setFailReason(reasonStr); + + WxOrder order = null; + try { if(status.equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) && !payOrderIdStr.equals("0")) { // 前端提示支付成功, 不作为支付成功标志,只检查支付订单状态 // 有价券不走update, callback更新 payOrder = wxPayOrderService.getById(payOrderId); if(payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())) { - return new ResultData(Result.SUCCESS, "支付状态更新成功"); + order = wxOrderService.getById(orderId); + return new ResultData(Result.SUCCESS, "支付状态更新成功", order); } else { return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付未状态,请等待!!"); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index c5120ef9f..108f6fa5d 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -110,35 +110,14 @@ public class WxUserGrantController extends BaseController { if(StringUtils.isBlank(wxAppinfo.getAccessToken())) { // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 - try { - String accessToken = wxMaService.getAccessToken(true); - wxAppinfo.setAccessToken(accessToken); - wxAppinfo.setLastTokenTime(new Date()); - wxAppinfo.setExpiresIn(7200); - wxAppinfoService.saveOrUpdate(wxAppinfo); - } catch (WxErrorException e) { - logger.error(e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - + updateAppAccessToken(wxAppinfo, wxMaService); wxMaService = getWeappServiceByAppInfo(wxAppinfo); } else { - // 检查token是否已过期, 小时就重新获取 + // 检查token是否已过期, 1小时就重新获取 Date curDate = new Date(); if(curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + 3600000) { - try { - String accessToken = wxMaService.getAccessToken(true); - wxAppinfo.setAccessToken(accessToken); - wxAppinfo.setLastTokenTime(new Date()); - wxAppinfo.setExpiresIn(7200); - wxAppinfoService.saveOrUpdate(wxAppinfo); - } catch (WxErrorException e) { - logger.error(e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage()); - } + updateAppAccessToken(wxAppinfo, wxMaService); wxMaService = getWeappServiceByAppInfo(wxAppinfo); } } @@ -170,8 +149,7 @@ public class WxUserGrantController extends BaseController { try { WxCUser user1 = wxCUserService.getByOpenId(user); if (user1 != null) { - user1.createToken(new Date()); - token = user1.getToken(); + token = user1.createToken(new Date()); resultMap.put("token", token); request.setAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, user1.getId()); @@ -192,6 +170,7 @@ public class WxUserGrantController extends BaseController { extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); user1.setExtraInfo(extraInfo.toJSONString()); + user1.setLoginCount(user1.getLoginCount()+1); wxCUserService.saveOrUpdate(user1); // 成长值 try { @@ -202,8 +181,7 @@ public class WxUserGrantController extends BaseController { wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN,user1); } else { user.setTenantId(wxAppinfo.getTenantId()); - user.createToken(new Date()); - token = user.getToken(); + token = user.createToken(new Date()); user.setRegisterIp(ipaddress); if (user.getSceneAddress() == null || user.getSceneAddress().equals("undefined")) @@ -219,6 +197,7 @@ public class WxUserGrantController extends BaseController { JSONObject extraInfo = new JSONObject(); extraInfo.put("systemInfo",JSONObject.parseObject(systemInfo)); user.setExtraInfo(extraInfo.toJSONString()); + user.setLoginCount(0); wxCUserService.saveOrUpdate(user); @@ -244,6 +223,25 @@ public class WxUserGrantController extends BaseController { return new ResultData(resultMap); } + /** + * WxAppInfo更新accessToken + * @param wxAppinfo + * @param wxMaService + */ + private void updateAppAccessToken(WxAppinfo wxAppinfo, WxMaService wxMaService) { + try { + String accessToken = wxMaService.getAccessToken(true); + wxAppinfo.setAccessToken(accessToken); + wxAppinfo.setLastTokenTime(new Date()); + wxAppinfo.setExpiresIn(7200); + wxAppinfoService.saveOrUpdate(wxAppinfo); + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + /** * 获取用户的昵称等信息 * @param map diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java b/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java index 40f12f03b..e876c12a1 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/HttpServletRequestWrapperFilter.java @@ -1,10 +1,14 @@ package com.iformall.interceptor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class HttpServletRequestWrapperFilter implements Filter { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -13,7 +17,8 @@ public class HttpServletRequestWrapperFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - + logger.debug("doFilter start"); + long start = System.currentTimeMillis(); ServletRequest requestWrapper = null; if (request instanceof HttpServletRequest) { requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); @@ -23,7 +28,7 @@ public class HttpServletRequestWrapperFilter implements Filter { } else { chain.doFilter(requestWrapper, response); } - + logger.debug("doFilter end: " + (System.currentTimeMillis()- start) + "ms"); } @Override diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java index 375576763..4c2e2e170 100644 --- a/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/RequestInterceptor.java @@ -34,8 +34,10 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + logger.debug("preHandle start"); if ("GET".equalsIgnoreCase(request.getMethod())) { // 获取不检查幂等 + logger.debug("preHandle start 1"); return true; } StringBuilder sb = new StringBuilder(); @@ -69,23 +71,25 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { sb.append(resultBody); - String key = "request: " + HashUtil.md5(sb.toString()); + String key = "request-" + HashUtil.md5(sb.toString()); if (redisTemplate.opsForValue().setIfAbsent(key, key)) { redisTemplate.expire(key, 3, TimeUnit.SECONDS); logger.info(key + ": 第一次提交"); + logger.debug("preHandle start 2"); return true; } logger.info(key + ": 第二次提交"); + logger.debug("preHandle start 3"); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { - + logger.debug("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - + logger.debug("afterCompletion"); } } diff --git a/mallinkCApi/src/main/java/com/iformall/interceptor/WebLogAspect.java b/mallinkCApi/src/main/java/com/iformall/interceptor/WebLogAspect.java new file mode 100644 index 000000000..c66aeef83 --- /dev/null +++ b/mallinkCApi/src/main/java/com/iformall/interceptor/WebLogAspect.java @@ -0,0 +1,72 @@ +package com.iformall.interceptor; + +import com.iformall.utils.IPUtil; +import lombok.Data; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; + +@Aspect +@Component +public class WebLogAspect { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Data + private class MethodInfo { + Long startTime; + String url; + String ip; + String method; + String classMethod; + } + + ThreadLocal startInfo = new ThreadLocal<>(); + + + @Pointcut("execution(public * com.iformall.controller..*.*(..))") + public void webLog() {} + + @Before("webLog()") + public void doBefore(JoinPoint joinPoint) throws Throwable { + logger.debug("aspect start"); + // 接收到请求,记录请求内容 + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + + MethodInfo info = new MethodInfo(); + info.setUrl(request.getRequestURL().toString()); + info.setStartTime(System.currentTimeMillis()); + info.setIp(IPUtil.getIpAddr(request)); + info.setMethod(request.getMethod()); + info.setClassMethod(joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); + startInfo.set(info); + logger.debug("aspect start ..."); + } + + @AfterReturning(returning = "ret", pointcut = "webLog()") + public void doAfterReturning(Object ret) throws Throwable { + logger.debug("aspect after"); + // 处理完请求,返回内容 + MethodInfo info = startInfo.get(); + StringBuilder sb = new StringBuilder(); + sb.append("URL: ").append(info.getUrl()) + .append(", METHOD: ").append(info.getMethod()) + .append(", DO: ").append(info.getClassMethod()) + .append(", IP: ").append(info.getIp()) + .append(", SPEND TIME: ").append(System.currentTimeMillis() -info.getStartTime()).append("ms"); + logger.info(sb.toString()); + logger.debug("aspect after .."); + } + + +} diff --git a/mallinkCApi/src/main/resources/application-dev.yml b/mallinkCApi/src/main/resources/application-dev.yml index 07091e190..d2dd7cfc0 100644 --- a/mallinkCApi/src/main/resources/application-dev.yml +++ b/mallinkCApi/src/main/resources/application-dev.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rabbitMQ # JDBC datasource: - url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) type: com.alibaba.druid.pool.DruidDataSource @@ -64,5 +66,5 @@ fm: logging: level: tk.mybatis: debug - com.iformall.mapper: debug + com.iformall: debug path: ./logs/c \ No newline at end of file diff --git a/mallinkCApi/src/main/resources/application-prod.yml b/mallinkCApi/src/main/resources/application-prod.yml index ec942d369..e8897ea1e 100644 --- a/mallinkCApi/src/main/resources/application-prod.yml +++ b/mallinkCApi/src/main/resources/application-prod.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rocketMQ # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) type: com.alibaba.druid.pool.DruidDataSource @@ -45,6 +47,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkCApi/src/main/resources/application-test.yml b/mallinkCApi/src/main/resources/application-test.yml index 6dd07629d..2acad0a81 100644 --- a/mallinkCApi/src/main/resources/application-test.yml +++ b/mallinkCApi/src/main/resources/application-test.yml @@ -1,7 +1,7 @@ spring: # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(Uc0AjgkytxHHCwZrmDASWg==) password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) type: com.alibaba.druid.pool.DruidDataSource @@ -45,6 +45,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkCApi/src/main/resources/application.yml b/mallinkCApi/src/main/resources/application.yml index bf31b2046..93efc61c0 100644 --- a/mallinkCApi/src/main/resources/application.yml +++ b/mallinkCApi/src/main/resources/application.yml @@ -12,6 +12,15 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 # @{link} https://github.com/abel533 #Mybatis diff --git a/mallinkMQConsumer/pom.xml b/mallinkMQConsumer/pom.xml new file mode 100644 index 000000000..ba97fccf5 --- /dev/null +++ b/mallinkMQConsumer/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + + mallink + com.iformall + 1.0 + + + mallinkMQConsumer + + + + com.iformall + mallinkService + 1.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java new file mode 100644 index 000000000..a341691ce --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/ConsumerApplication.java @@ -0,0 +1,35 @@ +package com.iformall; + +import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +import tk.mybatis.spring.annotation.MapperScan; + +/** + * @author chenkx + * @date 2017-12-26 + */ +@SpringBootApplication +@MapperScan(basePackages = {"com.iformall.mapper"}) +@EnableSwagger2 +@EnableRocketMQ +@EnableEncryptableProperties +public class ConsumerApplication { + + @Value("${fm.exception}") + private boolean fmException; + + @Bean + public boolean isFmException() { + return fmException; + } + + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/AwsProperty.java b/mallinkMQConsumer/src/main/java/com/iformall/config/AwsProperty.java new file mode 100644 index 000000000..0329f1d6d --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/AwsProperty.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "aws") +public class AwsProperty { + // AWS ACCESS KEY + private String access; + + private String secret; + + private String clientRegion; + + private String bucketName; + + public String getAccess() { + return access; + } + + public void setAccess(String access) { + this.access = access; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getClientRegion() { + return clientRegion; + } + + public void setClientRegion(String clientRegion) { + this.clientRegion = clientRegion; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/PayProperty.java b/mallinkMQConsumer/src/main/java/com/iformall/config/PayProperty.java new file mode 100644 index 000000000..5cb7f4915 --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/PayProperty.java @@ -0,0 +1,24 @@ +package com.iformall.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Stormeye + */ +@Component +@ConfigurationProperties(prefix = "pay") +public class PayProperty { + /** + * 真实支付 + */ + private boolean real; + + public boolean isReal() { + return real; + } + + public void setReal(boolean real) { + this.real = real; + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/RedisConfig.java b/mallinkMQConsumer/src/main/java/com/iformall/config/RedisConfig.java new file mode 100644 index 000000000..66d012d3f --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/RedisConfig.java @@ -0,0 +1,129 @@ +package com.iformall.config; + +import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxScoreRules; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created by Stormeye on 2018/10/1. + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + //缓存管理器 + @Bean + public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { + /* + //user信息缓存配置 + RedisCacheConfiguration userCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)).disableCachingNullValues().prefixKeysWith("user"); + Map redisCacheConfigurationMap = new HashMap<>(); + redisCacheConfigurationMap.put("user", userCacheConfiguration); + //初始化一个RedisCacheWriter + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); + // 设置CacheManager的值序列化方式为JdkSerializationRedisSerializer,但其实RedisCacheConfiguration默认就是使用StringRedisSerializer序列化key,JdkSerializationRedisSerializer序列化value,所以以下注释代码为默认实现 + // ClassLoader loader = this.getClass().getClassLoader(); + // JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader); + // RedisSerializationContext.SerializationPair pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer); + // RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair); + RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig(); + //设置默认超过期时间是30秒 + defaultCacheConfig.entryTtl(Duration.ofSeconds(30)); + //初始化RedisCacheManager + RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig, redisCacheConfigurationMap); + return cacheManager; + */ + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一个默认配置,通过config对象即可对缓存进行自定义配置 + config = config.entryTtl(Duration.ofMinutes(1)) // 设置缓存的默认过期时间,也是使用Duration设置 + .disableCachingNullValues(); // 不缓存空值 + + // 设置一个初始化的缓存空间set集合 + Set cacheNames = new HashSet<>(); + cacheNames.add("my-redis-cache1"); + cacheNames.add("my-redis-cache2"); + + // 对每个缓存空间应用不同的配置 + Map configMap = new HashMap<>(); + configMap.put("my-redis-cache1", config); + configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120))); + + RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory) // 使用自定义的缓存配置初始化一个cacheManager + .initialCacheNames(cacheNames) // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置 + .withInitialCacheConfigurations(configMap) + .build(); + return cacheManager; + } + + @Bean("pushLimitRedisTemplate") + public RedisTemplate getPushLimitRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(PushLimit.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + + @Bean("scoreRuleRedisTemplate") + public RedisTemplate getScoreRuleRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxScoreRules.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/RestFilter.java b/mallinkMQConsumer/src/main/java/com/iformall/config/RestFilter.java new file mode 100644 index 000000000..429c56b57 --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/RestFilter.java @@ -0,0 +1,52 @@ +package com.iformall.config; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Optional; + +/** + * 前后端分离RESTful接口过滤器 + * + * @author xuguoqin + * + */ +public class RestFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest req = null; + if (request instanceof HttpServletRequest) { + req = (HttpServletRequest) request; + } + HttpServletResponse res = null; + if (response instanceof HttpServletResponse) { + res = (HttpServletResponse) response; + } + if (req != null && res != null) { + //设置允许传递的参数 + res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization"); + //设置允许带上cookie + res.setHeader("Access-Control-Allow-Credentials", "true"); + String origin = Optional.ofNullable(req.getHeader("Origin")).orElse(req.getHeader("Referer")); + //设置允许的请求来源 + res.setHeader("Access-Control-Allow-Origin", origin); + //设置允许的请求方法 + res.setHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS"); + } + chain.doFilter(request, response); + } + + @Override + public void destroy() { + + } + +} \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/RestTemplateConfig.java b/mallinkMQConsumer/src/main/java/com/iformall/config/RestTemplateConfig.java new file mode 100644 index 000000000..560a77cb5 --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/RestTemplateConfig.java @@ -0,0 +1,24 @@ +package com.iformall.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory factory) { + return new RestTemplate(factory); + } + + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory() { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(5000);//ms + factory.setConnectTimeout(10000);//ms + return factory; + } +} \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/java/com/iformall/config/WebConfig.java b/mallinkMQConsumer/src/main/java/com/iformall/config/WebConfig.java new file mode 100644 index 000000000..48708f36e --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/config/WebConfig.java @@ -0,0 +1,79 @@ +package com.iformall.config; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationConfig; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.List; + +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + //registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/"); + + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "DELETE", "PUT") + .maxAge(3600); + } + + @Override + public void configureMessageConverters(List> converters) { + MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); + //ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然 + ObjectMapper objectMapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + + //不显示为null的字段 + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + DeserializationConfig dc = objectMapper.getDeserializationConfig(); + // 设置反序列化日期格式、忽略不存在get、set的属性 + objectMapper.setConfig( + dc.with(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")) + .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + ); + + //序列化将Long转String类型 + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + SimpleModule bigIntegerModule = new SimpleModule(); + //序列化将BigInteger转String类型 + bigIntegerModule.addSerializer(BigInteger.class, ToStringSerializer.instance); + SimpleModule bigDecimalModule = new SimpleModule(); + //序列化将BigDecimal转String类型 + bigDecimalModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); + objectMapper.registerModule(simpleModule); + objectMapper.registerModule(bigDecimalModule); + objectMapper.registerModule(bigIntegerModule); + jackson2HttpMessageConverter.setObjectMapper(objectMapper); + converters.add(jackson2HttpMessageConverter); + } + + +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java b/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java new file mode 100644 index 000000000..32b4e4f0b --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/controller/HomeController.java @@ -0,0 +1,32 @@ +package com.iformall.controller; + +import com.iformall.common.ResultData; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + + + +@RestController +@Api(description = "登录相关接口") +public class HomeController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Value("${version}") + private String version; + + @Value("${spring.mail.username}") + private String from; + + @ApiOperation("获取后端版本号") + @GetMapping("/version") + public ResultData version() { + return new ResultData(version); + } + + +} \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java new file mode 100644 index 000000000..884066d14 --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -0,0 +1,73 @@ +package com.iformall.mq; + +import com.iformall.domain.po.*; +import com.iformall.enums.*; +import com.iformall.mapper.WxMsgRecordMapper; +import com.iformall.service.impl.SendCallBackSmsServiceImpl; +import com.iformall.service.impl.SendEmailServiceImpl; +import com.iformall.service.impl.SendSmartAppMsgServiceImpl; +import com.iformall.service.impl.SendSmsServiceImpl; +import com.iformall.utils.JsonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 消息消费入口 + */ +@Service +public class MqBaseConsumer { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxMsgRecordMapper wxMsgRecordMapper; + @Autowired + private SendSmsServiceImpl sendSmsService; + @Autowired + private SendCallBackSmsServiceImpl sendCallBackSmsService; + @Autowired + private SendEmailServiceImpl sendEmailService; + @Autowired + private SendSmartAppMsgServiceImpl sendSmartAppMsgService; + @Autowired + private MqBaseProducer mqBaseProducer; + + public void doMessage(String message) { + log.info("received message: {}", message); + BaseMsg baseMsg = null; + + try { + baseMsg = (BaseMsg)JsonUtil.readValue(message,BaseMsg.class); + + if(EnumMsgRecordType.SMS.getCode().equals(baseMsg.getMsgType())){ + //短信 + sendSmsService.send((WxMsgRecord)JsonUtil.readValue(message,WxMsgRecord.class)); + }else if(EnumMsgRecordType.SMS_CALLBACK.getCode().equals(baseMsg.getMsgType())){ + //业务短信 + sendCallBackSmsService.send((WxMsg)JsonUtil.readValue(message,WxMsg.class)); + }else if(EnumMsgRecordType.EMAIL.getCode().equals(baseMsg.getMsgType())){ + //邮件 + sendEmailService.send((MailMsg)JsonUtil.readValue(message,MailMsg.class)); + }else if(EnumMsgRecordType.SMART_APP.getCode().equals(baseMsg.getMsgType())){ + //微信小程序 + sendSmartAppMsgService.send((SmartAppMsg)JsonUtil.readValue(message,SmartAppMsg.class)); + } + + baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); + wxMsgRecordMapper.update(baseMsg); + }catch (Exception e){ + //todo:测试下 + if(null != baseMsg){ + if(baseMsg.getDelayTimeLevel() < 3){ + baseMsg.setDelayTimeLevel(3); //10s后重试 + mqBaseProducer.sendMessage(baseMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + }else{ + baseMsg.setStatusMessage(e.getMessage()); + baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_FAIL.getCode()); + wxMsgRecordMapper.update(baseMsg); + } + } + } + + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RabbitMqConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RabbitMqConsumer.java new file mode 100644 index 000000000..111902271 --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RabbitMqConsumer.java @@ -0,0 +1,42 @@ +package com.iformall.mq.impl; + +import com.iformall.mq.MqBaseConsumer; +import com.iformall.mq.MQConfig; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Profile(MQConfig.Impl.RABBIT_MQ) +public class RabbitMqConsumer extends MqBaseConsumer { + String queueName = "topic-1"; + + @Autowired + private AmqpAdmin amqpAdmin; + + @PostConstruct + public void init() { + DirectExchange exchange = new DirectExchange(queueName); + Queue queue = new Queue(queueName); + Binding binding = BindingBuilder.bind(queue).to(exchange).withQueueName(); + amqpAdmin.declareExchange(exchange); + amqpAdmin.declareQueue(queue); + amqpAdmin.declareBinding(binding); + } + + @Autowired + private AmqpTemplate rabbitTemplate; + + public void send(String msg) { + rabbitTemplate.convertAndSend(queueName, msg); + } + + @RabbitListener(queues = "topic-1") + public void onMessage(String message) { + doMessage(message); + } +} diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RocketMqConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RocketMqConsumer.java new file mode 100644 index 000000000..ee1d0681d --- /dev/null +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/impl/RocketMqConsumer.java @@ -0,0 +1,19 @@ +package com.iformall.mq.impl; + +import com.iformall.mq.MqBaseConsumer; +import com.iformall.mq.MQConfig; +import lombok.extern.slf4j.Slf4j; +import org.rocketmq.starter.annotation.RocketMQListener; +import org.rocketmq.starter.annotation.RocketMQMessage; +import org.springframework.context.annotation.Profile; + +@Slf4j +@Profile(MQConfig.Impl.ROCKET_MQ) +@RocketMQListener(topic = "topic-1",consumeThreadMax=100,consumeThreadMin = 20) +public class RocketMqConsumer extends MqBaseConsumer { + + @RocketMQMessage(messageClass = String.class, tag = "tag-1") + public void onMessage(String message) { + doMessage(message); + } +} diff --git a/mallinkMQConsumer/src/main/resources/application-dev.yml b/mallinkMQConsumer/src/main/resources/application-dev.yml new file mode 100644 index 000000000..61d080451 --- /dev/null +++ b/mallinkMQConsumer/src/main/resources/application-dev.yml @@ -0,0 +1,89 @@ +spring: + profiles: + include: rabbitMQ + # JDBC + datasource: + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true + username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) + password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + #jackson: + #date-format: yyyy-MM-dd HH:mm:ss + + # REDIS + redis: + host: 202.165.179.86 + port: 6379 + password: ENC(aYJ3Wr2UWtkORRQjjrWWpz2ZeTISsHOA) + timeout: 3600 + expire: 1800 #30分钟 + database: 1 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 50 + max-idle: 50 + max-wait: -1 + min-idle: 10 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(R0bER9E9OB9/YQcpNXMyYDwofNVb8/pFl4nrApS8mi0=) + password: ENC(50YqJd0iK/2r2YnmEd5RKaki3ktU73UDapBJrVYfqmc=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: fumao + password: f8l89&*%%u7f1t22 + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) + secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) + + +jasypt: + encryptor: + password: oRqdnDbK5pj3eMmB + +fm: + exception: false + +logging: + level: + tk.mybatis: debug + com.iformall.mapper: debug + path: ./logs/s diff --git a/mallinkMQConsumer/src/main/resources/application-prod.yml b/mallinkMQConsumer/src/main/resources/application-prod.yml new file mode 100644 index 000000000..8081ace96 --- /dev/null +++ b/mallinkMQConsumer/src/main/resources/application-prod.yml @@ -0,0 +1,75 @@ +spring: + profiles: + include: rocketMQ + # JDBC + datasource: + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true + username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) + password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + # REDIS + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(8gYU47Fu93NUJPhwPCiPbAT+6VFA1YDx1egK4Z0Nl6w=) + timeout: 3600 + expire: 1800 #30分钟 + database: 1 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 8 + max-idle: 8 + max-wait: -1 + min-idle: 0 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(I2YKxnRVPY7J1r/bwzwHOhQCjj3nVqCWEbVTJvBq7y0=) + password: ENC(APQMO9XQRzMKd0eap+oSSOYH9MQe/r5K0YFF9A9mizU=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) + secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) + + + +fm: + exception: true + +logging: + level: + tk.mybatis: debug + com.iformall: debug + path: ./logs/s \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/resources/application-test.yml b/mallinkMQConsumer/src/main/resources/application-test.yml new file mode 100644 index 000000000..14c53bbea --- /dev/null +++ b/mallinkMQConsumer/src/main/resources/application-test.yml @@ -0,0 +1,71 @@ +spring: + # JDBC + datasource: + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true + username: ENC(Uc0AjgkytxHHCwZrmDASWg==) + password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + filters: stat + maxActive: 20 + initialSize: 1 + maxWait: 60000 + minIdle: 1 + timeBetweenEvictionRunsMillis: 28000 + minEvictableIdleTimeMillis: 28000 + validationQuery: select 'x' + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + poolPreparedStatements: true + maxOpenPreparedStatements: 20 + connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000" + # REDIS + redis: + host: 127.0.0.1 + port: 6379 + password: ENC(QFwqv3NshvvGhFPiP8rwhvbnxk+rFSqhJi8Pw6TogSg=) + timeout: 3600 + expire: 1800 #30分钟 + database: 1 + defaultExpiration: 2592000 # 默认生命周期30天 + jedis: + pool: + max-active: 8 + max-idle: 8 + max-wait: -1 + min-idle: 0 + # EMAIL + mail: + host: smtp.exmail.qq.com + username: ENC(HFbRXtAFVxU36Hk0yT3reyvRuLrw3RhMlbxFj9Ev/VY=) + password: ENC(pk4+/3C5n2hMYmgi+VTqI4P1m77DllW8y4KElMXXmIo=) # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / + +aws: + clientRegion: cn-northwest-1 + bucketName: iformall-net + access: ENC(NCLcmjwKpAWdn/abD17OKIY7yKepVLWzEpqRYUlURCw=) + secret: ENC(TRcZqql0Rq5PExlMeH/4WiZ/i02b8FXKmLTBChJmbluTa1uoLS9LrHyNEMrqe1DK+QgOAdvqGBo=) + +fm: + exception: true + +logging: + level: + tk.mybatis: debug + com.iformall: debug + path: ./logs/s \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/resources/application.yml b/mallinkMQConsumer/src/main/resources/application.yml new file mode 100644 index 000000000..be865eef6 --- /dev/null +++ b/mallinkMQConsumer/src/main/resources/application.yml @@ -0,0 +1,73 @@ +server: + port: 5001 + servlet: + context-path: /mq + +spring: + application: + name: mallink + profiles: + active: dev + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + default-property-inclusion: non_null + servlet: + multipart: + max-file-size: 2MB + max-request-size: 2MB + cache: + type: REDIS + cache-names: redis_cache #缓存的名字(可以不指定) + redis: + time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 202.165.179.86 + port: 5672 + username: guest + password: guest + publisher-confirms: true + virtual-host: / + + +# @{link} https://github.com/abel533 +#Mybatis +mybatis: + type-aliases-package: com.iformall.domain.po + mapper-locations: classpath:mapper/*Mapper.xml + configuration: + map-underscore-to-camel-case: true + cache-enabled: true + lazy-loading-enabled: true + use-generated-keys: true + default-fetch-size: 100 + default-statement-timeout: 10 + +#PageHelper +pagehelper: + helperDialect: mysql + reasonable: false + supportMethodsArguments: true + params: count=countSql + offset-as-page-num: true + page-size-zero: true + row-bounds-with-count: true + +mapper: + mappers: + - com.iformall.common.CommonMapper + +pay: + real: true + + +version: @project.version@ \ No newline at end of file diff --git a/mallinkMQConsumer/src/main/resources/logback-spring.xml b/mallinkMQConsumer/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..0499e2c57 --- /dev/null +++ b/mallinkMQConsumer/src/main/resources/logback-spring.xml @@ -0,0 +1,100 @@ + + + + + + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] --%mdc{client}%msg%n + + + + + ${logPath}/trace.log + + ${logPath}/daily/trace.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + + + ${logPath}/info.log + + ${logPath}/daily/info.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + INFO + ACCEPT + DENY + + + + + ${logPath}/debug.log + + ${logPath}/daily/debug.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + DEBUG + ACCEPT + DENY + + + + + + ${logPath}/warn.log + + ${logPath}/daily/warn.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + WARN + ACCEPT + DENY + + + + + + + ${logPath}/error.log + + ${logPath}/daily/error.%d{yyyy-MM-dd}.log + 180 + + + [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java index 68815c746..b9396d4e2 100644 --- a/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java +++ b/mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java @@ -1,6 +1,7 @@ package com.iformall; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; +import org.rocketmq.starter.annotation.EnableRocketMQ; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,6 +16,7 @@ import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableSwagger2 +@EnableRocketMQ @EnableEncryptableProperties public class ScheduleApplication { diff --git a/mallinkSchedule/src/main/java/com/iformall/config/RedisConfig.java b/mallinkSchedule/src/main/java/com/iformall/config/RedisConfig.java index 2e6e9bc63..510f03601 100644 --- a/mallinkSchedule/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkSchedule/src/main/java/com/iformall/config/RedisConfig.java @@ -1,6 +1,7 @@ package com.iformall.config; import com.iformall.domain.po.PushLimit; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxScoreRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,4 +110,21 @@ public class RedisConfig extends CachingConfigurerSupport { return template; } + @Bean("cuserTokenRedisTemplate") + public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate(); + + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); + // value值的序列化 + template.setValueSerializer(j); + template.setHashKeySerializer(j); + + // key的序列化 + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + + template.setConnectionFactory(connectionFactory); + return template; + } + } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SchedulingConfig.java b/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java similarity index 94% rename from mallinkSchedule/src/main/java/com/iformall/schedule/SchedulingConfig.java rename to mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java index adb5fb5e1..3ef7737ca 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SchedulingConfig.java +++ b/mallinkSchedule/src/main/java/com/iformall/config/SchedulingConfig.java @@ -1,4 +1,4 @@ -package com.iformall.schedule; +package com.iformall.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java b/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java index 6ace453ad..0631ecf61 100644 --- a/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java +++ b/mallinkSchedule/src/main/java/com/iformall/controller/HomeController.java @@ -1,11 +1,18 @@ package com.iformall.controller; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxMsgRecord; +import com.iformall.mq.MQConfig; +import com.iformall.mq.MqBaseProducer; +import com.iformall.mq.impl.RabbitMqMessageProducer; +import com.iformall.mq.impl.RocketMqMessageProducer; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -18,10 +25,22 @@ public class HomeController { @Value("${version}") private String version; + @Autowired + private MqBaseProducer mqBaseProducer; + + @Autowired + private RabbitMqMessageProducer rabbitMqMessageProducer; + @ApiOperation("获取后端版本号") @GetMapping("/version") public ResultData version() { return new ResultData(version); } + + @GetMapping("/mqtest") + public ResultData mqtest() { + mqBaseProducer.sendMessage(new WxMsgRecord(), "topic-1", "tag-1", "key-1"); + return new ResultData(); + } } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java index f4a51d95e..c3d06fd86 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/BillNotificationSchedule.java @@ -1,25 +1,18 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONObject; -import com.iformall.common.IdWorker; -import com.iformall.domain.po.WxMsgCallback; -import com.iformall.domain.po.WxMsgConfig; -import com.iformall.domain.po.WxMsgValidationcode; -import com.iformall.domain.po.WxMsgValidationcodeModel; -import com.iformall.enums.EnumMsgModel; -import com.iformall.enums.EnumMsgSendStatus; -import com.iformall.enums.EnumVerifyCode; +import com.iformall.domain.po.*; +import com.iformall.enums.*; import com.iformall.mapper.*; -import com.iformall.utils.WiwideUtil; +import com.iformall.mq.MqBaseProducer; +import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; - import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.Date; import java.util.List; import java.util.Map; @@ -46,6 +39,9 @@ public class BillNotificationSchedule { @Autowired private WxMsgCallbackMapper wxMsgCallbackMapper; + @Autowired + private MqBaseProducer mqBaseProducer; + /** * 每天9点执行 @@ -69,22 +65,17 @@ public class BillNotificationSchedule { String phone = bill.get("linkPhone").toString(); String appname = bill.get("appname").toString(); logger.info("欠缴账单检验短信配置信息"); - WxMsgConfig wxMsgConfig = checkMsgConfig(tenantId); - if (wxMsgConfig != null) { - logger.info("欠缴账单获取模板内容"); - WxMsgValidationcodeModel wxMsgValidationcodeModel = getMsgModel(tenantId, EnumMsgModel.BILL_OWE.getCode()); - if (wxMsgValidationcodeModel != null) { - String signature = wxMsgValidationcodeModel.getSignature(); - String msg = wxMsgValidationcodeModel.getContent(). - replace("{price}", price.toString()). - replace("{app}", appname); - String notifyUrl = wxMsgConfig.getNotifyurl(); - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - sendWaitPayBillMsg(phone, signature, msg, notifyUrl, secret, bid, publickey); - } - } + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.BILL_OWE.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setTenantId(tenantId); + Map map = new HashedMap(); + map.put("price",price.toString()); + map.put("app",appname); + wxMsgRecord.setDynamicContentMap(map); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } } @@ -100,87 +91,38 @@ public class BillNotificationSchedule { String phone = bill.get("linkPhone").toString(); String appname = bill.get("appname").toString(); logger.info("待缴账单检验短信配置信息"); - WxMsgConfig wxMsgConfig = checkMsgConfig(tenantId); - if (wxMsgConfig != null) { - logger.info("待缴账单获取模板内容"); - WxMsgValidationcodeModel wxMsgValidationcodeModel = getMsgModel(tenantId, EnumMsgModel.BILL_WAIT_PAY.getCode()); - if (wxMsgValidationcodeModel != null) { - String signature = wxMsgValidationcodeModel.getSignature(); - String msg = wxMsgValidationcodeModel.getContent(). - replace("{price}", price.toString()). - replace("{date}", receiveDate). - replace("{app}", appname); - String notifyUrl = wxMsgConfig.getNotifyurl(); - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - sendWaitPayBillMsg(phone, signature, msg, notifyUrl, secret, bid, publickey); - } - } - } - - } - - private WxMsgConfig checkMsgConfig(String tenantId) { - WxMsgConfig wxMsgConfig = new WxMsgConfig(); - wxMsgConfig.setTenantId(tenantId); - List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); - if (wxMsgConfigs.size() == 0) { - logger.info("缺少系统短信配置"); - return null; - } - wxMsgConfig = wxMsgConfigs.get(0); - if (wxMsgConfig.getRemains() == 0) { - logger.info("短信数量为0"); - return null; - } - return wxMsgConfigs.get(0); - } - - private WxMsgValidationcodeModel getMsgModel(String tenantId, Integer type) { - logger.info("获取通知模板-租户:" + tenantId + ",类型:" + type); - WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); - wxMsgValidationcodeModel.setTenantId(tenantId); - wxMsgValidationcodeModel.setType(type); - List list = wxMsgValidationcodelModelMapper.findList(wxMsgValidationcodeModel); - if (!list.isEmpty()) { - return wxMsgValidationcodelModelMapper.findList(wxMsgValidationcodeModel).get(0); - } - return null; - } - private void sendWaitPayBillMsg(String phone, String signature, String msg, String notifyUrl, String secret, String bid, String publickey) { - logger.info("开始调用迈外迪短信接口"); - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), null); - logger.info("迈外迪短信接口返回值:" + result); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - String ret = jsonObjectResult.get("ret").toString(); - String batchNo = jsonObjectResult.get("data").toString(); - if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode())) { - final IdWorker idWorker = IdWorker.get(); - WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setId(idWorker.nextId()); - wxMsgValidationcode.setCreatetime(new Date()); - wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); - addMsgCallback(wxMsgValidationcode, batchNo); +// WxMsgConfig wxMsgConfig = checkMsgConfig(tenantId); +// if (wxMsgConfig != null) { +// logger.info("待缴账单获取模板内容"); +// WxMsgValidationcodeModel wxMsgValidationcodeModel = getMsgModel(tenantId, EnumMsgModel.BILL_WAIT_PAY.getCode()); +// if (wxMsgValidationcodeModel != null) { +// String signature = wxMsgValidationcodeModel.getSignature(); +// String msg = wxMsgValidationcodeModel.getContent(). +// replace("{price}", price.toString()). +// replace("{date}", receiveDate). +// replace("{app}", appname); +// String notifyUrl = wxMsgConfig.getNotifyurl(); +// String secret = wxMsgConfig.getSecret(); +// String bid = wxMsgConfig.getBid(); +// String publickey = wxMsgConfig.getPublickey(); +// sendWaitPayBillMsg(phone, signature, msg, notifyUrl, secret, bid, publickey); +// } +// } + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.BILL_OWE.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setTenantId(tenantId); + Map map = new HashedMap(); + map.put("price",price.toString()); + map.put("app",appname); + map.put("date",receiveDate); + wxMsgRecord.setDynamicContentMap(map); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } - } - public void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo) { - logger.info("验证码发送时主动添加回调记录开始..."); - String phone = wxmsg.getPhone(); - final IdWorker idWorker = IdWorker.get(); - WxMsgCallback wxMsgCallback = new WxMsgCallback(); - wxMsgCallback.setId(idWorker.nextId()); - wxMsgCallback.setPhone(phone); - wxMsgCallback.setTenantId(wxmsg.getTenantId()); - wxMsgCallback.setBatchNo(batchNo); - wxMsgCallback.setMsgId(wxmsg.getId()); - wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SENDING.getCode()); - wxMsgCallback.setCreatetime(new Date()); - wxMsgCallbackMapper.insertSelective(wxMsgCallback); - logger.info("验证码发送时主动添加回调记录结束..."); } - } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java new file mode 100644 index 000000000..d3bc4dbc6 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/ChartDataSchedule.java @@ -0,0 +1,238 @@ +package com.iformall.schedule; + +import com.iformall.common.IdWorker; +import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.WxChartDataEntity; +import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxMerchantTradeDaily; +import com.iformall.enums.EnumCarCmd; +import com.iformall.enums.EnumChartType; +import com.iformall.mapper.*; +import com.iformall.utils.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +@Component +public class ChartDataSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxCarCmdLogMapper wxCarCmdLogMapper; + + @Autowired + WxMallMapper wxMallMapper; + + @Autowired + WxCUserCarMapper wxCUserCarMapper; + + @Autowired + WxChartDataMapper wxChartDataMapper; + + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + + @Autowired + WxMerchantTradeDailyMapper wxMerchantTradeDailyMapper; + + + /** + * 每天7点执行 + */ + @Scheduled(cron = "0 0 7 * * ?") + public void createData() { + createCarData(); + createSaleData(); + createMerchantTradeData(); + } + + /** + * 出场车辆、缴费车辆、缴费金额、新增会员、新增停车会员、已绑车辆 + */ + public void createCarData() { + HashMap params = new HashMap<>(); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + Date createtime = new Date(); + String startdate = DateUtils.getTimeBefore(1, createtime); + Date date = DateUtils.stringToDate(startdate); + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", startdate + " 23:59:59"); + + WxChartDataEntity wxChartDataEntity = new WxChartDataEntity(); + wxChartDataEntity.setQuerytime(date); + + List wxMalls = wxMallMapper.findList(null); + for (WxMall wxMall : wxMalls) { + String tenantId = wxMall.getTenantId(); + params.put("tenantId", tenantId); + wxChartDataEntity.setTenantId(tenantId); + wxChartDataEntity.setType(EnumChartType.CAR_OUT.getCode()); + int count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("出场车数>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carOutData(params, createtime, date, tenantId); + } + wxChartDataEntity.setType(EnumChartType.CAR_PAID.getCode()); + count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + logger.info("缴费车辆>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carPaidData(params, createtime, date, tenantId); + } + wxChartDataEntity.setType(EnumChartType.CAR_PAY_FEE.getCode()); + count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("缴费金额>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carPayFeeData(params, createtime, date, tenantId); + } + wxChartDataEntity.setType(EnumChartType.CAR_MEMBER.getCode()); + count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("新增会员>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carMemberData(params, createtime, date, tenantId); + } + wxChartDataEntity.setType(EnumChartType.CAR_NEW_MEMBER.getCode()); + count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("新增停车会员>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carNewMemberData(createtime, date, tenantId); + } + wxChartDataEntity.setType(EnumChartType.CAR_BIND.getCode()); + count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("已绑车辆>>>>>>>>>>>>>>>>>>>>>>>>>>"); + carBindData(params, createtime, date, tenantId); + } + } + } + + /** + * 销售总交易额 + */ + public void createSaleData() { + HashMap params = new HashMap<>(); + Date createtime = new Date(); + String yesterday = DateUtils.getTimeBefore(1, createtime); + String today = DateUtils.getSystemTime("yyyy-MM-dd"); + Date startdate = DateUtils.stringToDate(yesterday); + Date enddate = DateUtils.stringToDate(today); + + WxChartDataEntity wxChartDataEntity = new WxChartDataEntity(); + wxChartDataEntity.setQuerytime(startdate); + + List wxMalls = wxMallMapper.findList(null); + for (WxMall wxMall : wxMalls) { + String tenantId = wxMall.getTenantId(); + params.put("tenantId", tenantId); + wxChartDataEntity.setTenantId(tenantId); + wxChartDataEntity.setType(EnumChartType.SALE_COUPON_PRICE.getCode()); + int count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("销售总交易额>>>>>>>>>>>>>>>>>>>>>>>>>>"); + Integer price = wxCouponOrderMapper.queryPriceTotal(tenantId, startdate, enddate); + addChartData(tenantId, price.toString(), EnumChartType.SALE_COUPON_PRICE.getCode(), startdate, createtime); + } + } + } + + /** + * 解单金额 + */ + public void createMerchantTradeData() { + HashMap params = new HashMap<>(); + Date createtime = new Date(); + String yesterday = DateUtils.getTimeBefore(1, createtime); + Date querytime = DateUtils.stringToDate(yesterday); + + WxChartDataEntity wxChartDataEntity = new WxChartDataEntity(); + wxChartDataEntity.setQuerytime(querytime); + + List wxMalls = wxMallMapper.findList(null); + for (WxMall wxMall : wxMalls) { + String tenantId = wxMall.getTenantId(); + params.put("tenantId", tenantId); + + wxChartDataEntity.setTenantId(tenantId); + wxChartDataEntity.setType(EnumChartType.MERCHANT_TRADE.getCode()); + int count = wxChartDataMapper.selectCount(wxChartDataEntity); + if (count == 0) { + logger.info("解单金额>>>>>>>>>>>>>>>>>>>>>>>>>>"); + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + wxMerchantTradeDaily.setReportDate(yesterday); + List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); + Integer price = 0; + if (!recordList.isEmpty()) { + price = recordList.get(0).getTradeAmt(); + } + addChartData(tenantId, price.toString(), EnumChartType.MERCHANT_TRADE.getCode(), querytime, createtime); + } + } + } + + + public void carBindData(HashMap params, Date createtime, Date date, String tenantId) { + Long todaybindcar = wxCUserCarMapper.queryCarCount(params); + addChartData(tenantId, todaybindcar.toString(), EnumChartType.CAR_BIND.getCode(), date, createtime); + } + + public void carNewMemberData(Date createtime, Date date, String tenantId) { + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + wxCUserBasicInfoDto.setStartTime(date); + wxCUserBasicInfoDto.setEndTime(date); + Integer carUserCount = wxCUserCarMapper.countUser(wxCUserBasicInfoDto); + addChartData(tenantId, carUserCount.toString(), EnumChartType.CAR_NEW_MEMBER.getCode(), date, createtime); + } + + public void carMemberData(HashMap params, Date createtime, Date date, String tenantId) { + List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(params); + Long userCount = carCountHistory.isEmpty() ? 0L : (Long) carCountHistory.get(0).get("count"); + addChartData(tenantId, userCount.toString(), EnumChartType.CAR_MEMBER.getCode(), date, createtime); + } + + public void carPayFeeData(HashMap params, Date createtime, Date date, String tenantId) { + List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(params); + BigDecimal fee = weekCarPayHistoryList.isEmpty() ? new BigDecimal(0) : (BigDecimal) weekCarPayHistoryList.get(0).get("fee"); + addChartData(tenantId, fee.toString(), EnumChartType.CAR_PAY_FEE.getCode(), date, createtime); + } + + public void carPaidData(HashMap params, Date createtime, Date date, String tenantId) { + Long carPayFeeCount = wxCarCmdLogMapper.queryWeekCarPayCount(params); + addChartData(tenantId, carPayFeeCount.toString(), EnumChartType.CAR_PAID.getCode(), date, createtime); + } + + public void carOutData(HashMap params, Date createtime, Date date, String tenantId) { + List> historylist = wxCarCmdLogMapper.queryHistory(params); + Long carOutCount = historylist.isEmpty() ? 0L : (Long) historylist.get(0).get("carcount"); + addChartData(tenantId, carOutCount.toString(), EnumChartType.CAR_OUT.getCode(), date, createtime); + } + + private void addChartData(String tenantId, String result, Integer type, Date querytime, Date createtime) { + logger.info("即将插入数据>>>>>>>>>>>>>>>>>>>>>>>"); + final IdWorker idWorker = IdWorker.get(); + long id = idWorker.nextId(); + WxChartDataEntity wxChartDataEntity = new WxChartDataEntity(); + wxChartDataEntity.setId(id); + wxChartDataEntity.setTenantId(tenantId); + wxChartDataEntity.setResult(result); + wxChartDataEntity.setType(type); + wxChartDataEntity.setQuerytime(querytime); + wxChartDataEntity.setCreatetime(createtime); + logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>" + wxChartDataEntity.toString()); + wxChartDataMapper.insertSelective(wxChartDataEntity); + } + +} \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java index 471902c36..2152bb852 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponExpiringSchedule.java @@ -1,5 +1,10 @@ package com.iformall.schedule; +import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxGame; +import com.iformall.enums.EnumCouponChannelStatus; +import com.iformall.enums.EnumCouponChannelType; +import com.iformall.enums.EnumGameStatus; import com.iformall.mapper.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,6 +14,8 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Component public class CouponExpiringSchedule { @@ -23,6 +30,12 @@ public class CouponExpiringSchedule { @Autowired private WxCouponSendMapper wxCouponSendMapper; + @Autowired + private WxScreenAdMapper wxScreenAdMapper; + + @Autowired + private WxGameMapper wxGameMapper; + @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨00:05 作废过期券,商户禁用券 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 @@ -41,7 +54,6 @@ public class CouponExpiringSchedule { wxCouponSendMapper.offExpiriedCouponSendByCouponStatus(); } - @Scheduled(cron = "0 10 0 * * ?") // 每天凌晨00:10 下架主动领取 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponChannelExpiringSchedule() { @@ -51,9 +63,40 @@ public class CouponExpiringSchedule { wxCouponChannelMapper.offExpiriedCouponChannelByCouponStatus(); } + @Scheduled(cron = "0 15 0 * * ?") // 每天凌晨00:15 下架券广告 + //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + public void screenAdExpiringSchedule() { + wxScreenAdMapper.offScreeAdByCouponChannelStatus(); + } + @Scheduled(cron = "0 0,1,2,3 0/1 * * ?") // 每小时 0, 1 ,2 ,3 分钟(整点)执行//限时抢购 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponChannel2ExpiringSchedule() { wxCouponChannelMapper.offExpiriedCouponChannel2ByEndTime(); } + + @Scheduled(cron = "0 20 0 * * ?") // 每天凌晨00:20 下架游戏 + //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + public void gameExpiringSchedule() { + WxGame wxGame = new WxGame(); + wxGame.setStatus(EnumGameStatus.STATUS_THROW_IN.getCode()); + + List list = wxGameMapper.findList(wxGame); + list.stream().forEach(g->{ + WxCouponChannel couponChannel = new WxCouponChannel(); + couponChannel.setTenantId(g.getTenantId()); + couponChannel.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_GAME.getCode()); + couponChannel.setSubTargetId(g.getId()); + couponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); + int count = wxCouponChannelMapper.countCouponChannel(couponChannel); + if (count == 0) { + WxGame record = new WxGame(); + record.setId(g.getId()); + record.setStatus(EnumGameStatus.STATUS_TAKE_OFFF.getCode()); + wxGameMapper.updateByPrimaryKeySelective(record); + } + }); + } + + } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 1f54b38f6..642371940 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -3,14 +3,14 @@ package com.iformall.schedule; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.config.PayProperty; +import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; -import com.iformall.enums.EnumAppType; -import com.iformall.enums.EnumCouponOrderStatus; -import com.iformall.enums.EnumCouponType; -import com.iformall.enums.EnumPayType; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.service.WxOrderService; import com.iformall.service.WxPayOrderService; +import com.iformall.service.WxProfitSharingOrderService; import com.iformall.service.WxRefundOrderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,59 +38,137 @@ public class CouponOrderExpiringSchedule { private WxRefundOrderService wxRefundOrderService; @Autowired - private WxPayOrderService wxPayOrderService; + private WxProfitSharingOrderService wxProfitSharingOrderService; @Autowired private WxAppinfoMapper wxAppinfoMapper; + @Autowired + private WxPayOrderMapper wxPayOrderMapper; + + @Autowired + private WxOrderMapper wxOrderMapper; + + @Autowired + private WxOrderService wxOrderService; + @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨00:05 - //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 - @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + // @Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponOrderExpiringSchedule() { - wxCouponOrderMapper.offExpiredCouponOrderByValidDate(); + + List list = wxCouponOrderMapper.findExpiredFreeCouponOrderByValidDate(); + list.stream().forEach(co -> { + // 券过期,更改状态及库存退回 + try { + couponOrderExpire(co, true); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + }); + } @Scheduled(cron = "0 5 0 * * ?") // 每天凌晨00:05 - //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + // @Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void couponOrderRefundSchedule() { List list = wxCouponOrderMapper.findExpiredCouponOrderByValidDate(); - list.parallelStream().forEach(co -> { - // 券过期与退款分离 - couponOrderExpire(co); - - if(!co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { - // 非储值卡, 可以退款 - WxAppinfo appinfo = new WxAppinfo(); - appinfo.setTenantId(co.getTenantId()); - appinfo.setType(EnumAppType.B.getCode()); - appinfo = wxAppinfoMapper.findList(appinfo).get(0); - - try { - wxRefundOrderService.createRefundOrder(payProperty.isReal(), appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null); - } catch (Exception e) { - logger.error("退款失败:"+e.getMessage()+"couponOrderId="+co.getId()); - } + list.stream().forEach(co -> { + // 券过期,更改状态及库存退回 + try { + couponOrderExpire(co, false); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + // 退款 + try { + couponOrderExpireRefund(co, true); + } catch (Exception e) { + logger.error(e.getMessage()); } }); } - private void couponOrderExpire(WxCouponOrder co) { + + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void couponOrderExpire(WxCouponOrder co, boolean bStockBack) { // 标记 couponOrder过期 - WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setId(co.getId()); + WxCouponOrder updateRecord = new WxCouponOrder(); + updateRecord.setId(co.getId()); if(co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_OVER_TIME.getCode()); // 卡线下退款 + updateRecord.setCouponOrderStatus(EnumCouponOrderStatus.CARD_OVER_TIME.getCode()); // 卡线下退款 } else { - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()); //券已过期 + updateRecord.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()); //券已过期 + } + updateRecord.setUpdateDate(new Date()); + wxCouponOrderMapper.updateByPrimaryKeySelective(updateRecord); + + // 库存退回 + if(bStockBack) { + WxOrder order = wxOrderMapper.selectByPrimaryKey(co.getOrderId()); + if(order != null) { + wxOrderService.stockBack(order); + } + } + } + + private void couponOrderExpireRefund(WxCouponOrder co, boolean bStockBack) { + // 非储值卡, 可以退款 + if(!co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode()) + && !co.getAutoRefund().equals(EnumCouponAutoRefund.UNSUPPORTED.getCode())) { + WxAppinfo appinfo = new WxAppinfo(); + appinfo.setTenantId(co.getTenantId()); + appinfo.setType(EnumAppType.B.getCode()); + appinfo = wxAppinfoMapper.findList(appinfo).get(0); + + try { + wxRefundOrderService.createRefundOrder(payProperty.isReal(), appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null); + } catch (MallinkException e) { + logger.error("退款失败:"+e.getMessage()+"couponOrderId="+co.getId()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } } - wxCouponOrder.setUpdateDate(new Date()); - try { - wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder); - } catch (Exception e) { - logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); + + if (co.getAutoRefund().equals(EnumCouponAutoRefund.UNSUPPORTED.getCode())){ + // 微信分账 + try { + WxPayOrder wxPayOrder = new WxPayOrder(); + wxPayOrder.setTenantId(co.getTenantId()); + wxPayOrder.setOrderId(co.getOrderId()); + wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + wxPayOrder = wxPayOrderMapper.selectOne(wxPayOrder); + if (wxPayOrder != null && wxPayOrder.getShare().equals(EnumPayShare.YES.getCode())) { + WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto(); + wxSharingOrderDto.setcUserId(wxPayOrder.getcUserId()); + wxSharingOrderDto.setMerchantId(0L); + wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_FINISH.getCode()); + wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount()); + wxSharingOrderDto.setOrderId(wxPayOrder.getId()); + wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart()); + wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd()); + wxSharingOrderDto.setTenantId(wxPayOrder.getTenantId()); + wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId()); + wxSharingOrderDto.setShareAmount(wxPayOrder.getShareAmount()); + wxProfitSharingOrderService.finishSharingOrder(wxSharingOrderDto); + } + + } catch (MallinkException e) { + logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } + + if(bStockBack) { + // 库存退回 + WxOrder order = wxOrderMapper.selectByPrimaryKey(co.getOrderId()); + if(order != null) { + wxOrderService.stockBack(order); + } + } } } } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index c0d26537a..f3bbbc16e 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -44,9 +44,6 @@ public class CouponSendSchedule { @Autowired private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; - @Autowired - private WxCUserMapper wxCUserMapper; - @Autowired private WxCouponSendMapper wxCouponSendMapper; diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java new file mode 100644 index 000000000..de124b25d --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/DeviceHbCheckSchedule.java @@ -0,0 +1,58 @@ +package com.iformall.schedule; + +import com.iformall.domain.po.WxDevice; + +import com.iformall.enums.EnumDeviceOnlineStatus; +import com.iformall.enums.EnumDeviceStatus; +import com.iformall.mapper.WxDeviceMapper; + +import com.iformall.service.WxDeviceService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; + + +@Component +public class DeviceHbCheckSchedule { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final int TIME_OUT_VALUE = 15 * 60 * 1000; //15分钟 + + + @Autowired + WxDeviceMapper wxDeviceMapper; + + @Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次 + //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + public void deviceHbCheckSchedule() { + + WxDevice wxDevice = new WxDevice(); + wxDevice.setStatus(EnumDeviceStatus.VALID.getCode()); + List list = wxDeviceMapper.findList(wxDevice); + + list.stream().forEach(d->{ + WxDevice record = new WxDevice(); + record.setId(d.getId()); + + if (d.getLastHbTime() == null) { + record.setOnlineStatus(EnumDeviceOnlineStatus.OFFLINE.getCode()); + } else { + if (new Date().getTime() - d.getLastHbTime().getTime() > TIME_OUT_VALUE) { + record.setOnlineStatus(EnumDeviceOnlineStatus.OFFLINE.getCode()); + } else { + record.setOnlineStatus(EnumDeviceOnlineStatus.ONLINE.getCode()); + } + } + if (!d.getOnlineStatus().equals(record.getOnlineStatus())) { + wxDeviceMapper.updateByPrimaryKeySelective(record); + } + }); + } + +} \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java index f2c1ba3ba..661e88f8a 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/MsgSendingSchedule.java @@ -1,24 +1,18 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.iformall.domain.po.WxMsg; -import com.iformall.domain.po.WxMsgConfig; -import com.iformall.domain.po.WxMsgModel; -import com.iformall.enums.EnumMsgSendStatus; -import com.iformall.enums.EnumMsgStatus; -import com.iformall.enums.EnumVerifyCode; +import com.iformall.enums.*; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgMapper; import com.iformall.mapper.WxMsgModelMapper; +import com.iformall.mq.MqBaseProducer; import com.iformall.utils.DateUtils; -import com.iformall.utils.WiwideUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; - import java.util.List; /** @@ -38,6 +32,9 @@ public class MsgSendingSchedule { @Autowired private WxMsgModelMapper wxMsgModelMapper; + @Autowired + private MqBaseProducer mqBaseProducer; + /** * 每小时第一分钟执行 */ @@ -46,60 +43,63 @@ public class MsgSendingSchedule { logger.info("sendmsg定时任务启动"); String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:00:00"); WxMsg wxMsg = new WxMsg(); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); wxMsg.setIsright(0); wxMsg.setSendtime(systemTime); List list = wxMsgMapper.findList(wxMsg); logger.info("将要发送的短信列表:" + JSONArray.toJSONString(list)); for (WxMsg msg : list) { - sendmsg(msg); + //sendmsg(msg); + mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(),null); } logger.info("sendmsg定时任务结束"); } - public void sendmsg(WxMsg wxMsg) { - logger.info("发送短信开始----------"); - //从短信配置中查询密钥 bid 等信息 - WxMsgConfig wxMsgConfig = new WxMsgConfig(); - wxMsgConfig.setTenantId(wxMsg.getTenantId()); - List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); - if (wxMsgConfigs.size() == 0) { - logger.info("短信相关配置不存在"); - return; - } - wxMsgConfig = wxMsgConfigs.get(0); - if (wxMsgConfig.getRemains() == 0) { - logger.info("短信数量为0"); - return; - } - if (wxMsgConfig.getRemains() < wxMsg.getExpectSendNumber()) { - logger.info("短信数量不足"); - return; - } - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - String phone = wxMsg.getPhones(); - String signature = wxMsg.getSignature(); - String msg = wxMsg.getMsg(); - String notifyUrl = wxMsgConfig.getNotifyurl(); - Integer modelId = null; - Long modelIdParam = wxMsg.getModelId(); - if (modelIdParam != null) { - WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(modelIdParam); - modelId = wxMsgModel.getModelId(); - } - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); - logger.info("短信返回结果:" + result); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - String ret = jsonObjectResult.get("ret").toString(); - if (ret.equals("1")) { - wxMsg.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); - } else { - wxMsg.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); - } - wxMsg.setStatus(EnumMsgStatus.MSG_STATUS_SENDED.getCode()); - wxMsgMapper.updateByPrimaryKeySelective(wxMsg); - logger.info("短信发送结束:" + jsonObjectResult.toJSONString()); - } +// @Deprecated +// public void sendmsg(WxMsg wxMsg) { +// logger.info("发送短信开始----------"); +// //从短信配置中查询密钥 bid 等信息 +// WxMsgConfig wxMsgConfig = new WxMsgConfig(); +// wxMsgConfig.setTenantId(wxMsg.getTenantId()); +// List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); +// if (wxMsgConfigs.size() == 0) { +// logger.info("短信相关配置不存在"); +// return; +// } +// wxMsgConfig = wxMsgConfigs.get(0); +// if (wxMsgConfig.getRemains() == 0) { +// logger.info("短信数量为0"); +// return; +// } +// if (wxMsgConfig.getRemains() < wxMsg.getExpectSendNumber()) { +// logger.info("短信数量不足"); +// return; +// } +// String secret = wxMsgConfig.getSecret(); +// String bid = wxMsgConfig.getBid(); +// String publickey = wxMsgConfig.getPublickey(); +// String phone = wxMsg.getPhones(); +// String signature = wxMsg.getSignature(); +// String msg = wxMsg.getMsg(); +// String notifyUrl = wxMsgConfig.getNotifyurl(); +// Integer modelId = null; +// Long modelIdParam = wxMsg.getModelId(); +// if (modelIdParam != null) { +// WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(modelIdParam); +// modelId = wxMsgModel.getModelId(); +// } +// String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); +// logger.info("短信返回结果:" + result); +// JSONObject jsonObjectResult = JSONObject.parseObject(result); +// String ret = jsonObjectResult.get("ret").toString(); +// if (ret.equals("1")) { +// wxMsg.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); +// } else { +// wxMsg.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); +// } +// wxMsg.setStatus(EnumMsgStatus.MSG_STATUS_SENDED.getCode()); +// wxMsgMapper.updateByPrimaryKeySelective(wxMsg); +// logger.info("短信发送结束:" + jsonObjectResult.toJSONString()); +// } } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java index b92595743..3e46bc15a 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java @@ -1,10 +1,18 @@ package com.iformall.schedule; +import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxOrderGroup; +import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumOrderStatus; import com.iformall.enums.EnumOrderType; +import com.iformall.enums.EnumRefundStatus; +import com.iformall.mapper.WxAppinfoMapper; +import com.iformall.mapper.WxOrderGroupMapper; import com.iformall.mapper.WxOrderMapper; +import com.iformall.service.WxOrderGroupService; import com.iformall.service.WxOrderService; +import com.iformall.service.WxRefundOrderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +38,17 @@ public class OrderExpiringSchedule { @Autowired WxOrderService wxOrderService; + @Autowired + WxOrderGroupMapper wxOrderGroupMapper; + + @Autowired + WxOrderGroupService wxOrderGroupService; + + @Autowired + WxAppinfoMapper wxAppinfoMapper; + + @Autowired + WxRefundOrderService wxRefundOrderService; @Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 @@ -39,31 +58,67 @@ public class OrderExpiringSchedule { Date curDate = new Date(); Date expireDate = new Date(curDate.getTime() - TIME_OUT_VALUE ); - // 券相关订单 + // 券相关订单, 15分钟未支付, 订单过期 dateMap.put("type", EnumOrderType.COUPON.getCode()); dateMap.put("endDate", expireDate); List orderCoupons = wxOrderMapper.findListOfUnpaidOrderByDate(dateMap); - orderCoupons.parallelStream().forEach( o -> { - orderExpired(o); + orderCoupons.stream().forEach( o -> { + try { + orderExpired(o); + } catch (Exception e) { + logger.error(e.getMessage()); + } }); - // 砍价相关订单 + // 砍价相关订单, 已超过砍价结束时间, 订单过期 dateMap.put("type", EnumOrderType.COUPON.getCode()); dateMap.put("endDate", curDate); List orderPresss = wxOrderMapper.findListOfUnpaidPressOrderByDate(dateMap); - orderPresss.parallelStream().forEach( o -> { - orderPressExpired(o); + orderPresss.stream().forEach( o -> { + try { + orderPressExpired(o); + } catch (Exception e) { + logger.error(e.getMessage()); + } + }); + + //拼团 过期与失败 + List orderGroups = wxOrderGroupService.findList(null); + orderGroups.stream().forEach(g -> { + try { + wxOrderGroupService.updateGroupStatus(g); + } catch (Exception e) { + logger.error(e.getMessage()); + } }); + + //参团失败 + WxOrder order = new WxOrder(); + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); + wxOrderMapper.select(order).parallelStream().forEach(o -> { + try { + returnMoney(o); + } catch (Exception e) { + logger.error("拼团订单退款失败" + e.getMessage()); + } + }); + + } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void orderExpired(WxOrder order) { - order.setUpdateDate(new Date()); - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()); - wxOrderMapper.updateByPrimaryKeySelective(order); + WxOrder updateOrder = new WxOrder(); + updateOrder.setId(order.getId()); + updateOrder.setUpdateDate(new Date()); + updateOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode()); + wxOrderMapper.updateByPrimaryKeySelective(updateOrder); + + // 库存退回 + wxOrderService.stockBack(order); // 微信 关单 - wxOrderService.orderClose(order); + wxOrderService.orderClose(updateOrder); logger.info("\nFound " + order.getId() + "\n" + " create at " + order.getCreateDate() +"\n" @@ -73,10 +128,31 @@ public class OrderExpiringSchedule { @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void orderPressExpired(WxOrder order) { Date curDate = new Date(); - order.setUpdateDate(curDate); - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()); - wxOrderMapper.updateByPrimaryKeySelective(order); + WxOrder updateOrder = new WxOrder(); + updateOrder.setId(order.getId()); + updateOrder.setTenantId(order.getTenantId()); + updateOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PRESS_OVERTIME.getCode()); + updateOrder.setUpdateDate(curDate); + wxOrderMapper.updateByPrimaryKeySelective(updateOrder); + // 库存退回 + wxOrderService.stockBack(order); logger.info("\n砍价订单: " + order.getId() + " create at " + order.getCreateDate() + " expired at " + curDate); } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void returnMoney(WxOrder order) { + + //获取APP信息 + WxAppinfo appinfo = new WxAppinfo(); + appinfo.setTenantId(order.getTenantId()); + appinfo.setType(EnumAppType.C.getCode()); + appinfo = wxAppinfoMapper.findList(appinfo).get(0); + //退款流程 + boolean has = wxRefundOrderService.hasRefundOrder(order.getId(), EnumRefundStatus.REFUND_SUCCESS.getCode()); + if (!has) { + wxRefundOrderService.returnMoney(appinfo, order.getId()); + } + } + } \ No newline at end of file diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java index d77de167b..5d0f81ea6 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderResultSchedule.java @@ -1,6 +1,5 @@ package com.iformall.schedule; -import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.WxProfitSharingOrder; import com.iformall.enums.EnumProfitSharingOrderStatus; import com.iformall.mapper.*; @@ -24,9 +23,6 @@ public class SharingOrderResultSchedule { @Autowired private WxProfitSharingOrderMapper wxProfitSharingOrderMapper; - @Autowired - private WxPayOrderMapper wxPayOrderMapper; - @Scheduled(cron = "0 15 0 * * ?") // 每天凌晨00:15更新分账结果 //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 public void sharingOrderResultSchedule() { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java index 28e216268..1692671e1 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WeChatAccessTokenSchedule.java @@ -42,10 +42,11 @@ public class WeChatAccessTokenSchedule { WxMaService wxMaService = MaUtil.getWeappService(appinfo); try { String accessToken = wxMaService.getAccessToken(true); - appinfo.setAccessToken(accessToken); - appinfo.setLastTokenTime(new Date()); - appinfo.setExpiresIn(7200); - wxAppinfoMapper.updateByPrimaryKey(appinfo); + WxAppinfo updateAppInfo = new WxAppinfo(); + updateAppInfo.setAccessToken(accessToken); + updateAppInfo.setLastTokenTime(new Date()); + updateAppInfo.setExpiresIn(7200); + wxAppinfoMapper.updateByPrimaryKeySelective(updateAppInfo); } catch (WxErrorException e) { logger.error(e.getMessage()); } catch (Exception e) { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java index a3ca73824..7c4f1a442 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java @@ -1,26 +1,19 @@ package com.iformall.schedule; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitTrend; +import com.iformall.utils.MaUtil; +import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxUserVisit; @@ -32,11 +25,6 @@ import com.iformall.service.WxUserVisitService; public class WxAppVisitSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private static String visit = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend?access_token="; - - @Autowired - private RestTemplate restTemplate; - @Autowired private WxUserVisitService wxUserVisitService; @@ -48,18 +36,20 @@ public class WxAppVisitSchedule { public void daliyVisitRetrive() { try { - WxAppinfo appInfo = new WxAppinfo(); - appInfo.setType(EnumAppType.C.getCode()); - PageInfo page = WxAppinfoService.listAsPage(appInfo, 1, 10000); - for(WxAppinfo w :page.getList()) { - if(StringUtils.isBlank(w.getAppId())||StringUtils.isBlank(w.getSecret())) { + WxAppinfo appInfoQ = new WxAppinfo(); + appInfoQ.setType(EnumAppType.C.getCode()); + List apps = WxAppinfoService.getList(appInfoQ); + for(WxAppinfo app:apps) { + if(StringUtils.isBlank(app.getAppId())||StringUtils.isBlank(app.getSecret())) { continue; } Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - String date = new SimpleDateFormat("yyyyMMdd").format(c.getTime()); - if (!checkData(date,w)) - getData(date,w); + c.add(Calendar.DAY_OF_YEAR, -1); + Date lastDate = c.getTime(); + String date = new SimpleDateFormat("yyyyMMdd").format(lastDate); + if (!checkData(date,app)) { + getData(lastDate, app); + } } }catch(Exception e) { logger.error("获取微信访问数据失败",e); @@ -73,18 +63,20 @@ public class WxAppVisitSchedule { WxAppinfo appInfo = new WxAppinfo(); appInfo.setType(EnumAppType.C.getCode()); - PageInfo page = WxAppinfoService.listAsPage(appInfo, 1, 10000); - for(WxAppinfo w :page.getList()) { - if(StringUtils.isBlank(w.getAppId())||StringUtils.isBlank(w.getSecret())) { + List apps = WxAppinfoService.getList(appInfo); + for(WxAppinfo appinfo :apps) { + if(StringUtils.isBlank(appinfo.getAppId())||StringUtils.isBlank(appinfo.getSecret())) { continue; } Calendar c = Calendar.getInstance(); String date; - for(int i = 0; i < 7; i++) { //查找最近7天有没有漏掉的数据 - c.add(Calendar.DAY_OF_YEAR, -2); + for(int i = 2;i <=7;i++) { //查找最近7天有没有漏掉的数据 + c.add(Calendar.DAY_OF_YEAR, -1*i); + Date lastDate = c.getTime(); date = new SimpleDateFormat("yyyyMMdd").format(c.getTime()); - if (!checkData(date,w)) - getData(date,w); + if (!checkData(date,appinfo)) { + getData(lastDate, appinfo); + } } } }catch(Exception e) { @@ -103,45 +95,30 @@ public class WxAppVisitSchedule { return false; } - private void getData(String date,WxAppinfo appInfo) throws Exception { - String accessToken = appInfo.getAccessToken(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Map map = new HashMap(); - map.put("begin_date", date); - map.put("end_date", date); - RestTemplate restTemplate = new RestTemplate(); - HttpEntity> entity = new HttpEntity>(map, headers); - String reqUrl =visit+accessToken; - ResponseEntity responseEntity = restTemplate.postForEntity(reqUrl, entity, String.class); - logger.info("获取wx访问数据:"+JSON.toJSONString(responseEntity)); - if(responseEntity.hasBody()) { - String body = responseEntity.getBody(); - Map maps = (Map)JSON.parse(body); - JSONArray jSONArray = (JSONArray)maps.get("list"); - if(jSONArray==null || jSONArray.isEmpty()) { - logger.error("获取数据失败:"+body); - return; - } - JSONObject jsonObject = jSONArray.getJSONObject(0); - Map itemMap = JSONObject.toJavaObject(jsonObject, Map.class); - logger.info(JSON.toJSONString(itemMap)); - WxUserVisit v = new WxUserVisit(); - // TODO hardcode appId - v.setAppId(appInfo.getAppId()); - String time = itemMap.get("ref_date")+""; - Date dayDate = new SimpleDateFormat("yyyyMMdd").parse(time); - v.setDayDate(dayDate); - v.setRefDate(time); - v.setSessionCnt(Integer.valueOf(itemMap.get("session_cnt")+"")); - v.setVisitPv(Integer.valueOf(itemMap.get("visit_pv")+"")); - v.setVisitUv(Integer.valueOf(itemMap.get("visit_uv")+"")); - v.setVisitUvNew(Integer.valueOf(itemMap.get("visit_uv_new")+"")); - v.setStayTimeSession(itemMap.get("stay_time_session")+""); - v.setVisitDepth(itemMap.get("visit_depth")+""); - v.setStayTimeUv(itemMap.get("stay_time_uv")+""); - v.setTenantId(appInfo.getTenantId()); - wxUserVisitService.saveOrUpdate(v); - } + private void getData(Date lastDate,WxAppinfo appInfo) throws Exception { + WxMaService wxMaService = MaUtil.getWeappService(appInfo); + try { + List vtList = wxMaService.getAnalysisService().getDailyVisitTrend(lastDate, lastDate); + logger.info(vtList.toString()); + for(WxMaVisitTrend maVisitTrend: vtList) { + WxUserVisit v = new WxUserVisit(); + v.setAppId(appInfo.getAppId()); + v.setTenantId(appInfo.getTenantId()); + String time = maVisitTrend.getRefDate(); + Date dayDate = new SimpleDateFormat("yyyyMMdd").parse(time); + v.setDayDate(dayDate); + v.setRefDate(time); + v.setSessionCnt(Integer.valueOf(maVisitTrend.getSessionCnt() + "")); + v.setVisitPv(Integer.valueOf(maVisitTrend.getVisitPv()+"")); + v.setVisitUv(Integer.valueOf(maVisitTrend.getVisitUv()+"")); + v.setVisitUvNew(Integer.valueOf(maVisitTrend.getVisitUvNew()+"")); + v.setStayTimeSession(maVisitTrend.getStayTimeSession()+""); + v.setVisitDepth(maVisitTrend.getVisitDepth()+""); + v.setStayTimeUv(maVisitTrend.getStayTimeUv()+""); + wxUserVisitService.saveOrUpdate(v); + } + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } } } diff --git a/mallinkSchedule/src/main/resources/application-dev.yml b/mallinkSchedule/src/main/resources/application-dev.yml index 70c47007f..23a4f20b5 100644 --- a/mallinkSchedule/src/main/resources/application-dev.yml +++ b/mallinkSchedule/src/main/resources/application-dev.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rabbitMQ # JDBC datasource: - url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false + url: jdbc:mysql://202.165.179.86:3306/mallinkDev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true username: ENC(dZ8fmrtuBMQYaRytKQgTqg==) password: ENC(WGu0+1DPIHrqorDhrbq1+7wr7xNG53mN) type: com.alibaba.druid.pool.DruidDataSource diff --git a/mallinkSchedule/src/main/resources/application-prod.yml b/mallinkSchedule/src/main/resources/application-prod.yml index 41098c265..8081ace96 100644 --- a/mallinkSchedule/src/main/resources/application-prod.yml +++ b/mallinkSchedule/src/main/resources/application-prod.yml @@ -1,7 +1,9 @@ spring: + profiles: + include: rocketMQ # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallink?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(NUzgQOdJnCbVLKT6BaX0aw==) password: ENC(mvuoDRiu0jqYaKNRwwTuXZ6U7aoIaqsjdiPqTLgi/nY=) type: com.alibaba.druid.pool.DruidDataSource @@ -46,6 +48,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: localhost + port: 5672 + username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) + password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkSchedule/src/main/resources/application-test.yml b/mallinkSchedule/src/main/resources/application-test.yml index 29602f8c0..14c53bbea 100644 --- a/mallinkSchedule/src/main/resources/application-test.yml +++ b/mallinkSchedule/src/main/resources/application-test.yml @@ -1,7 +1,7 @@ spring: # JDBC datasource: - url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://formalldb.cfqyqflkdlit.rds.cn-northwest-1.amazonaws.com.cn:3306/mallinkTest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true username: ENC(Uc0AjgkytxHHCwZrmDASWg==) password: ENC(nV4Mi3bEbBx0Fj7uUyYH55eTaqsFMjKvmNzagicH4pc=) type: com.alibaba.druid.pool.DruidDataSource @@ -46,6 +46,14 @@ spring: auth: true starttls: enable: true + # RABBITMQ + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: ENC(aSRr6mnSryEqzHHz1hJf1g==) + password: ENC(GnjF/mdqKdvmDYC0tIIso7+20/jBALPw39tiWCYJ4iw=) + publisher-confirms: true + virtual-host: / aws: clientRegion: cn-northwest-1 diff --git a/mallinkSchedule/src/main/resources/application.yml b/mallinkSchedule/src/main/resources/application.yml index 14e568b8c..482a50e6d 100644 --- a/mallinkSchedule/src/main/resources/application.yml +++ b/mallinkSchedule/src/main/resources/application.yml @@ -21,7 +21,22 @@ spring: cache-names: redis_cache #缓存的名字(可以不指定) redis: time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) - + rocketmq: + nameServer: 127.0.0.1:9876 + producer: + retry-times-when-send-async-failed: 0 + send-msg-timeout: 300000 + compress-msg-body-over-howmuch: 4096 + max-message-size: 4194304 + retry-another-broker-when-not-store-ok: false + retry-times-when-send-failed: 2 + rabbitmq: + host: 127.0.0.1 + port: 5672 + username: guest + password: guest + publisher-confirms: true + virtual-host: / # @{link} https://github.com/abel533 diff --git a/mallinkService/pom.xml b/mallinkService/pom.xml index 9dbdf8782..5d4801bf5 100644 --- a/mallinkService/pom.xml +++ b/mallinkService/pom.xml @@ -20,12 +20,6 @@ compile --> - - - org.flowable - flowable-spring-boot-starter-basic - 6.4.0 - \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 9f539d08e..5fced5c4d 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -27,17 +27,6 @@ public enum ErrorCode{ SYS_EXTEND_JSON_ERROR(1012, "JSON格式异常"), SYS_REPEAT_SUBMIT_EXCEPTION(1013, "请勿重复操作"), - /** - * 审批流 - */ - FLOW_FAIL(24000, "审批流操作出错"), - - - /** - * 审批流不存在 - */ - FLOW_INST_NOT_EXIST(24001, "任务不存在"), - /** * 数据库 */ @@ -59,6 +48,8 @@ public enum ErrorCode{ /** * 用户2000-2099 */ + USER_PASSWD_ERR(1987, "用户名或者密码错误"), + USER_IS_MULTI(1988, "有多个手机号,请联系富茂管理员"), USER_IS_NOT_MEMBER(1989,"用户还未授权手机号成为会员"), USER_PHONE_IS_NOT_FOUND(1990,"手机号不存在"), USER_DEL_SELF(1991,"用户删除自己"), @@ -67,8 +58,7 @@ public enum ErrorCode{ USER_USE_ROLE(1994,"用户使用此角色"), USER_IS_EMPTY(2000, "用户不存在"), PASSWORD_ERROR(2001, "密码错误"), - LOGIN_USER_OR_PWD_ERROR(2002, "用户名或密码错误"), - USER_IS_LOCKED(2003, "用户已经被锁定不能登录,请与管理员联系"), + USER_IS_LOCKED(2003, "用户已经被禁用不能登录,请与管理员联系"), NEW_USER_FAILD(2004, "创建新用户失败"), BUSER_NOT_IN_APP(2005, "用户不是此app用户"), KAPCHA_NOT_VALID(2006, "验证码已失效"), @@ -98,13 +88,13 @@ public enum ErrorCode{ COUPON_TYPE_IS_NOT_ACTIVE(2025, "此券不能用于主动领取"), COUPON_TYPE_IS_NOT_PASSIVE(2026, "此券不能用于定向投放"), COUPON_CHANNEL_IS_EXISTED(2027, "此券已投放过"), - COUPON_CHANNEL_IS_TAKE_OFF(2031, "此券已下架"), COUPON_SEND_IS_EXISTED(2028, "此券已经添加到该渠道"), COUPON_SEND_IS_INVALID(2029, "此发券渠道不存在"), - COUPON_SEND_IS_INVALID_TIME(2030, "发放时间不能晚于使用时间"), - - COUPON_MERCHANT_NOT_FOUND(2031, "卡券关联商户未发现"), - + COUPON_SEND_IS_INVALID_TIME(2030, "投放的时间超出劵的有效期"), + COUPON_CHANNEL_IS_TAKE_OFF(2031, "此券已下架"), + COUPON_MERCHANT_NOT_FOUND(2032, "卡券关联商户未发现"), + COUPON_CHANNEL_IS_NOT_STARTED(2033, "此券活动未开始"), + COUPON_CHANNEL_IS_END(2033, "此券活动已结束"), PUSH_LIMIT_UP_TO_1DAYLIMIT(2040, "此用户一天内发券到达疲劳度限制"), PUSH_LIMIT_UP_TO_COUPONLIMIT(2041, "此用户发此券到达疲劳度限制"), @@ -132,7 +122,7 @@ public enum ErrorCode{ * 游戏 */ GAME_NOT_FOUND(2070, "游戏未找到"), - GAME_HAS_BEEN_LIMITED(2071, "游戏次数以达到上限"), + /** * 订单 */ @@ -159,6 +149,8 @@ public enum ErrorCode{ COUPON_ORDER_IS_INVALID(4003, "卡券已经作废"), COUPON_ORDER_BUSER_IS_NULL(4004, "卡券B端用户不存在"), COUPON_ORDER_MERANT_IS_NULL(4005, "卡券商户不存在"), + COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE(4006, "卡券使用期还未开始"), + COUPON_ORDER_IS_LATER_THAN_VALIDDATE(4007, "卡券使用期已结束"), /** * 卡 @@ -166,6 +158,8 @@ public enum ErrorCode{ CARD_IS_NOT_FOUND(9001, "优惠卡不存在"), CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH(9002, "优惠卡余额不足"), CARD_IS_NOT_COST(9003, "优惠卡未消费,退款请用卡券退款,钱直接退回购买人手里"), + CARD_TRANSFERED(9004, "卡已被领取"), + CARD_TRANSFER_INVALID(9005, "卡转赠已失效"), /** * 卡消费 @@ -315,9 +309,10 @@ public enum ErrorCode{ /** - * 物业押金账单 + * 押金账单 * */ BILL_PROPERTY_DEPOSIT_IS_NOT_FOUND(20000,"物业押金账单不存在"), + BILL_OTHER_DEPOSIT_IS_NOT_FOUND(200001, "其他押金账单不存在"), /** * 日常费用账单 @@ -335,6 +330,51 @@ public enum ErrorCode{ WIWIDE_INFO_NOT_FOUND(23001,"迈外迪信息未找到"), WIWIDE_INFO_NOT_READY(23002,"迈外迪信息未就绪"), + + /** + * 审批流 + */ + FLOW_FAIL(24000, "审批流操作出错"), + FLOW_INST_NOT_EXIST(24001, "任务不存在"), + /** + * 微信第三方 + */ + WEAPP_APPID_NOT_AUTH(24100, "appid未授权"), + WEAPP_BASIC_SET_ERR(24101, "基础配置错误"), + WEAPP_BASIC_SET_DOMAIN_ERR(24102, "基础服务器域名配置错误"), + WEAPP_EXT_SET_ERR(24103, "扩展配置错误"), + WEAPP_CODE_COMMIT_ERR(24104, "code提交失败"), + WEAPP_AUDIT_ERR(24105, "提交审核失败"), + WEAPP_HAD_AUDITING(24106, "已有审核中"), + WEAPP_NOT_AUDITED(24107, "审核未通过"), + WEAPP_APP_RELEASEED(24108, "已发布"), + + WECHAT_LOGIN_KEY_OVERTIME(24130, "已过期"), + WECHAT_LOGIN_USER_SELECT(24131, "请选择要登录的用户"), + WECHAT_LOGIN_NOT_BIND(24132, "您的微信号未绑定,请登录后绑定"), + + /** + * 屏广告 + */ + SCREENAD_NOT_FOUND(25000, "屏广告未找到"), + + /** + * IOT设备 + */ + DEVICE_NOT_FOUND(26000, "设备未注册到系统"), + DEVICE_ALREADY_EXIST(26001, "设备已经存在"), + DEVICE_QRCODE_GET_FAILED(26002, "微信二维码生成失败,请重试"), + /** + * 消息组件 + */ + MSG_MODEL_NOT_FOUND(27000, "找不到短信模板"), + MSG_CONFIG_NOT_FOUND(27001, "找不到短信配置"), + + /** + * 拼团 + */ + ORDER_GROUP_COOPERATING_FAILD(28001, "参团失败"), + ; private int code; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java new file mode 100644 index 000000000..c19ade6cd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/BaseMsg.java @@ -0,0 +1,72 @@ +package com.iformall.domain.po; + +import javax.persistence.Transient; +import java.io.Serializable; + +/** + * @author luozukai + * @date 2019/3/7 10:05 + */ +public class BaseMsg implements Serializable { + private static final long serialVersionUID = 923764283764823L; + + //唯一标识 + @Transient + private String uuid; + + //消息类型 1短信 2回调短信 3邮件 4微信小程序模板 5微信公众号模板 6系统通知 + @Transient + private Integer msgType; + + //消息状态 0默认1发送成功2消费成功3消费失败 + @Transient + private Integer msgStatus; + + //结果信息 + @Transient + private String statusMessage; + + //延迟消息1s,5s,10s,30s,1m,2m,3m,4m,5m,6m,7m,8m,9m,10m,20m,30m,1h,2h + @Transient + private Integer delayTimeLevel = 0; + + public Integer getDelayTimeLevel() { + return delayTimeLevel; + } + + public void setDelayTimeLevel(Integer delayTimeLevel) { + this.delayTimeLevel = delayTimeLevel; + } + + public String getStatusMessage() { + return statusMessage; + } + + public void setStatusMessage(String statusMessage) { + this.statusMessage = statusMessage; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Integer getMsgStatus() { + return msgStatus; + } + + public void setMsgStatus(Integer msgStatus) { + this.msgStatus = msgStatus; + } + + public Integer getMsgType() { + return msgType; + } + + public void setMsgType(Integer msgType) { + this.msgType = msgType; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java new file mode 100644 index 000000000..d60ea6f57 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/MailMsg.java @@ -0,0 +1,87 @@ +package com.iformall.domain.po; + +/** + * @author luozukai + * @date 2019/3/7 10:05 + */ +public class MailMsg extends BaseMsg { + private static final long serialVersionUID = 923764283760321L; + + private String[] to; + private String from; + private String msg; + + //标题 + private String subject; + //是否html格式 + private boolean isHtml; + //附件 + private String filePath; + //嵌入静态资源 + private String rscPath; + private String rscI; + + public String[] getTo() { + return to; + } + + public void setTo(String[] to) { + this.to = to; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public boolean isHtml() { + return isHtml; + } + + public void setHtml(boolean html) { + isHtml = html; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getRscPath() { + return rscPath; + } + + public void setRscPath(String rscPath) { + this.rscPath = rscPath; + } + + public String getRscI() { + return rscI; + } + + public void setRscI(String rscI) { + this.rscI = rscI; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java index 8163e212a..33ab0c92e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/MallUserInfo.java @@ -1,6 +1,8 @@ package com.iformall.domain.po; +import com.iformall.enums.EnumUserWechat; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import javax.persistence.Id; import javax.persistence.Table; @@ -71,11 +73,18 @@ public class MallUserInfo implements Serializable { @io.swagger.annotations.ApiModelProperty(value="昵称",name="nickName") private String nickName; - @io.swagger.annotations.ApiModelProperty(value="手机",name="phone") + @io.swagger.annotations.ApiModelProperty(value="手机,系统内手机号唯一",name="phone") private String phone; - /** B端用户微信openid,领导看数据塔台用 */ - @io.swagger.annotations.ApiModelProperty(value="openId",name="openId") - private String openId; + + @io.swagger.annotations.ApiModelProperty(value="B端用户微信openid,领导看数据塔台用",name="bopenId") + private String bopenId; + + @io.swagger.annotations.ApiModelProperty(value="admin用户微信登录用,可绑定多个账户",name="webOpenId") + private String webOpenId; + + @io.swagger.annotations.ApiModelProperty(value="1 未绑定wechat,0 绑定微信",name="withWechat") + @Transient + private Integer withWechat; @Transient private Long roleId; @@ -96,7 +105,7 @@ public class MallUserInfo implements Serializable { private String captcha; /**1合同审批 2账单审批**/ - @io.swagger.annotations.ApiModelProperty(value="",name="flowPermission") + @io.swagger.annotations.ApiModelProperty(value="1合同审批 2账单审批",name="flowPermission") private String flowPermission; public String getFlowPermission() { @@ -211,7 +220,20 @@ public class MallUserInfo implements Serializable { this.captcha = captcha; } - public String getPhone() { + public Integer getWithWechat() { + if(StringUtils.isNotBlank(this.webOpenId)) { + this.withWechat = EnumUserWechat.HAD.getCode(); + } else { + this.withWechat = EnumUserWechat.NO.getCode(); + } + return this.withWechat; + } + + public void setWithWechat(Integer withWechat) { + this.withWechat = withWechat; + } + + public String getPhone() { return phone; } @@ -219,15 +241,23 @@ public class MallUserInfo implements Serializable { this.phone = phone; } - public String getOpenId() { - return openId; - } + public String getBopenId() { + return bopenId; + } - public void setOpenId(String openId) { - this.openId = openId; - } + public void setBopenId(String bopenId) { + this.bopenId = bopenId; + } + + public String getWebOpenId() { + return webOpenId; + } + + public void setWebOpenId(String webOpenId) { + this.webOpenId = webOpenId; + } - public static enum Field + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") @@ -240,7 +270,8 @@ public class MallUserInfo implements Serializable { ,IsAdmin_ASC("`is_admin` ASC"),IsAdmin_DESC("`is_admin` DESC") ,NickName_ASC("`nick_name` ASC"),NickName_DESC("`nick_name` DESC") ,Phone_ASC("`phone` ASC"),Phone_DESC("`phone` DESC") - ,OpenId_ASC("`open_id` ASC"),OpenId_DESC("`open_id` DESC") + ,BOpenId_ASC("`bopen_id` ASC"),BOpenId_DESC("`bopen_id` DESC") + ,WebOpenId_ASC("`web_open_id` ASC"),WebOpenId_DESC("`web_open_id` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java new file mode 100644 index 000000000..cddc63e09 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java @@ -0,0 +1,87 @@ +package com.iformall.domain.po; + +import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; +import java.util.List; + +/** + * 微信小程序消息 + * @author luozukai + * @date 2019/3/7 10:05 + */ +public class SmartAppMsg extends BaseMsg { + private static final long serialVersionUID = 223232132183760321L; + + //小程序的appId + private String appId; + private String tenantId; + private String to; + private String from; + private Integer templateType; + private String gotopage; + private String emphasisKeyword; + private List templateDataList; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getEmphasisKeyword() { + return emphasisKeyword; + } + + public void setEmphasisKeyword(String emphasisKeyword) { + this.emphasisKeyword = emphasisKeyword; + } + + public String getGotopage() { + return gotopage; + } + + public void setGotopage(String gotopage) { + this.gotopage = gotopage; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public Integer getTemplateType() { + return templateType; + } + + public void setTemplateType(Integer templateType) { + this.templateType = templateType; + } + + public List getTemplateDataList() { + return templateDataList; + } + + public void setTemplateDataList(List templateDataList) { + this.templateDataList = templateDataList; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java new file mode 100644 index 000000000..dad1ab0bd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxAuthorizerInfo.java @@ -0,0 +1,144 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "wx_authorizer_info") +@Data +public class WxAuthorizerInfo implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value="授权方appid",name="authorizerAppid") + private String authorizerAppid; + @io.swagger.annotations.ApiModelProperty(value="授权方头像",name="headImg") + private String headImg; + @io.swagger.annotations.ApiModelProperty(value="授权方公众号所设置的微信号,可能为空",name="alias") + private String alias; + @io.swagger.annotations.ApiModelProperty(value="二维码图片的URL,开发者最好自行也进行保存",name="qrcodeUrl") + private String qrcodeUrl; + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") + private Date createTime; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") + private Date updateTime; + @io.swagger.annotations.ApiModelProperty(value="授权状态,0为已授权,1为已取消授权",name="authorizationStatus") + private Integer authorizationStatus; + @io.swagger.annotations.ApiModelProperty(value="授权时间",name="authTime") + private Date authTime; + @io.swagger.annotations.ApiModelProperty(value="微信基础版本设置状态,0为已设置,1为设置失败",name="baseStatus") + private Integer baseStatus; + @io.swagger.annotations.ApiModelProperty(value="微信基础版本设置时间",name="baseTime") + private Date baseTime; + @io.swagger.annotations.ApiModelProperty(value="微信服务器域名版本设置状态,0为已设置,1为设置失败",name="domainStatus") + private Integer domainStatus; + @io.swagger.annotations.ApiModelProperty(value="微信服务器域名版本设置时间",name="domainTime") + private Date domainTime; + @io.swagger.annotations.ApiModelProperty(value="微信服务器业务域名版本设置状态,0为已设置,1为设置失败",name="webdomainStatus") + private Integer webdomainStatus; + @io.swagger.annotations.ApiModelProperty(value="微信服务器业务域名版本设置时间",name="webdomainTime") + private Date webdomainTime; + @io.swagger.annotations.ApiModelProperty(value="微信小程序模板设置状态,0为已设置,1为设置失败",name="templateStatus") + private Integer templateStatus; + @io.swagger.annotations.ApiModelProperty(value="微信小程序模板设置时间",name="templateTime") + private Date templateTime; + @io.swagger.annotations.ApiModelProperty(value="当前版本",name="currentVersion") + private String currentVersion; + @io.swagger.annotations.ApiModelProperty(value="当前版本描述",name="currentDesc") + private String currentDesc; + @io.swagger.annotations.ApiModelProperty(value="当前版本发布时间",name="releaseTime") + private Date releaseTime; + @io.swagger.annotations.ApiModelProperty(value="微信开放平台appId",name="openAppid") + private String openAppid; + @io.swagger.annotations.ApiModelProperty(value="绑定开发平台时间",name="bindOpenTime") + private Date bindOpenTime; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,AuthorizerAppid_ASC("`authorizer_appid` ASC"),AuthorizerAppid_DESC("`authorizer_appid` DESC") + ,HeadImg_ASC("`head_img` ASC"),HeadImg_DESC("`head_img` DESC") + ,Alias_ASC("`alias` ASC"),Alias_DESC("`alias` DESC") + ,QrcodeUrl_ASC("`qrcode_url` ASC"),QrcodeUrl_DESC("`qrcode_url` DESC") + ,CreateTime_ASC("`create_time` ASC"),CreateTime_DESC("`create_time` DESC") + ,UpdateTime_ASC("`update_time` ASC"),UpdateTime_DESC("`update_time` DESC") + ,AuthorizationStatus_ASC("`authorization_status` ASC"),AuthorizationStatus_DESC("`authorization_status` DESC") + ,AuthTime_ASC("`auth_time` ASC"),AuthTime_DESC("`auth_time` DESC") + ,BaseStatus_ASC("`base_status` ASC"),BaseStatus_DESC("`base_status` DESC") + ,BaseTime_ASC("`base_time` ASC"),BaseTime_DESC("`base_time` DESC") + ,DomainStatus_ASC("`domain_status` ASC"),DomainStatus_DESC("`domain_status` DESC") + ,DomainTime_ASC("`domain_time` ASC"),DomainTime_DESC("`domain_time` DESC") + ,WebDomainStatus_ASC("`webdomain_status` ASC"),WebDomainStatus_DESC("`webdomain_status` DESC") + ,WebDomainTime_ASC("`webdomain_time` ASC"),WebDomainTime_DESC("`webdomain_time` DESC") + ,TemplateStatus_ASC("`template_status` ASC"),TemplateStatus_DESC("`template_status` DESC") + ,TemplateTime_ASC("`template_time` ASC"),TemplateTime_DESC("`template_time` DESC") + ,CurrentVersion_ASC("`current_version` ASC"),CurrentVersion_DESC("`current_version` DESC") + ,CurrentDesc_ASC("`current_desc` ASC"),CurrentDesc_DESC("`current_desc` DESC") + ,ReleaseTime_ASC("`release_time` ASC"),ReleaseTime_DESC("`release_time` DESC") + ,OpenAppId_ASC("`open_appid` ASC"),OpenAppId_DESC("`open_appid` DESC") + ,BindOpenTime_ASC("`bind_open_time` ASC"),BindOpen_DESC("`bind_open_time` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxAuthorizerInfo.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java index f9274d31f..63329d737 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDaily.java @@ -87,7 +87,7 @@ public class WxBillDaily implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1待缴2欠缴3已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期", name = "status") private Integer status; /*删除 是1否0**/ @io.swagger.annotations.ApiModelProperty(value="删除 是1否0",name="isDel") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java index 3f7186aff..652d0ee9f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillDeposit.java @@ -71,7 +71,7 @@ public class WxBillDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1未到期2待缴3欠缴4已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期5已退还", name = "status") private Integer status; /*是否删除 是1否0 未到期不显示**/ @io.swagger.annotations.ApiModelProperty(value="是否删除 是1否0 未到期不显示",name="isDel") @@ -101,6 +101,9 @@ public class WxBillDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") + private Integer returnPrice; + public Date getStarttime() { return starttime; } @@ -230,6 +233,14 @@ public class WxBillDeposit implements Serializable { this.rentShopType = rentShopType; } + public Integer getReturnPrice() { + return returnPrice; + } + + public void setReturnPrice(Integer returnPrice) { + this.returnPrice = returnPrice; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -281,7 +292,7 @@ public class WxBillDeposit implements Serializable { sb.append(","); sb.append(fields[k].toString()); } - + this.sortColumns = sb.toString(); } public void setSortColumns(String sortColumns) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java index 4b28c8f1a..67d145637 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOther.java @@ -98,7 +98,7 @@ public class WxBillOther implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1待缴2欠缴3已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期", name = "status") private Integer status; /*删除 是1否0**/ @io.swagger.annotations.ApiModelProperty(value="删除 是1否0",name="isDel") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java index dc7c6c306..1154fc19b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillOtherDeposit.java @@ -101,7 +101,7 @@ public class WxBillOtherDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "欠缴", name = "owe") private Integer owe; /*账单状态1待缴2欠缴3已结清**/ - @io.swagger.annotations.ApiModelProperty(value = "账单状态1未到期2待缴3欠缴4已结清5已退还", name = "status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期5已退还", name = "status") private Integer status; /*删除 是1否0**/ @io.swagger.annotations.ApiModelProperty(value = "删除 是1否0", name = "isDel") @@ -122,6 +122,9 @@ public class WxBillOtherDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") + private Integer returnPrice; + public Integer getReceivePay() { return receivePay; } @@ -242,6 +245,14 @@ public class WxBillOtherDeposit implements Serializable { this.rentShopType = rentShopType; } + public Integer getReturnPrice() { + return returnPrice; + } + + public void setReturnPrice(Integer returnPrice) { + this.returnPrice = returnPrice; + } + public static enum Field { Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), ReceivePay_ASC("`receivePay` ASC"), ReceivePay_DESC("`receivePay` DESC"), Pay_ASC("`pay` ASC"), Pay_DESC("`pay` DESC"), ReceiveDate_ASC("`receiveDate` ASC"), ReceiveDate_DESC("`receiveDate` DESC"), PayDate_ASC("`payDate` ASC"), PayDate_DESC("`payDate` DESC"), Createtime_ASC("`createtime` ASC"), Createtime_DESC("`createtime` DESC"), ExpiredDay_ASC("`expiredDay` ASC"), ExpiredDay_DESC("`expiredDay` DESC"), TenantId_ASC("`tenantId` ASC"), TenantId_DESC("`tenantId` DESC"), Owe_ASC("`owe` ASC"), Owe_DESC("`owe` DESC"), Status_ASC("`status` ASC"), Status_DESC("`status` DESC"), IsDel_ASC("`isDel` ASC"), IsDel_DESC("`isDel` DESC"), MerchantId_ASC("`merchantId` ASC"), MerchantId_DESC("`merchantId` DESC"), UserId_ASC("`userId` ASC"), UserId_DESC("`userId` DESC"), ShopId_ASC("`shopId` ASC"), ShopId_DESC("`shopId` DESC"), Updatetime_ASC("`updatetime` ASC"), Updatetime_DESC("`updatetime` DESC"); private String value; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java index 78441681c..6de3ee128 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillProperty.java @@ -71,7 +71,7 @@ public class WxBillProperty implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1未到期2待缴3欠缴4已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期", name = "status") private Integer status; /*是否删除 是1否0 未到期不显示**/ @io.swagger.annotations.ApiModelProperty(value="是否删除 是1否0 未到期不显示",name="isDel") @@ -101,6 +101,32 @@ public class WxBillProperty implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "营业额", name = "revenue") + private Integer revenue; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金费率", name = "latePayRatio") + private Integer latePayRatio; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金时间", name = "latePayTime") + private Date latePayTime; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金总额", name = "latePayPrice") + private Integer latePayPrice; + + @io.swagger.annotations.ApiModelProperty(value = "账期", name = "period") + private Integer period; + + @io.swagger.annotations.ApiModelProperty(value = "预览账单0否1是", name = "isPreview") + private Integer isPreview; + + public Integer getIsPreview() { + return isPreview; + } + + public void setIsPreview(Integer isPreview) { + this.isPreview = isPreview; + } + public Date getStarttime() { return starttime; } @@ -233,6 +259,46 @@ public class WxBillProperty implements Serializable { this.rentShopType = rentShopType; } + public Integer getRevenue() { + return revenue; + } + + public void setRevenue(Integer revenue) { + this.revenue = revenue; + } + + public Integer getLatePayRatio() { + return latePayRatio; + } + + public void setLatePayRatio(Integer latePayRatio) { + this.latePayRatio = latePayRatio; + } + + public Date getLatePayTime() { + return latePayTime; + } + + public void setLatePayTime(Date latePayTime) { + this.latePayTime = latePayTime; + } + + public Integer getLatePayPrice() { + return latePayPrice; + } + + public void setLatePayPrice(Integer latePayPrice) { + this.latePayPrice = latePayPrice; + } + + public Integer getPeriod() { + return period; + } + + public void setPeriod(Integer period) { + this.period = period; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -252,6 +318,7 @@ public class WxBillProperty implements Serializable { ,UserId_ASC("`userId` ASC"),UserId_DESC("`userId` DESC") ,ShopId_ASC("`shopId` ASC"),ShopId_DESC("`shopId` DESC") ,Updatetime_ASC("`updatetime` ASC"),Updatetime_DESC("`updatetime` DESC") + ,Period_ASC("`period` ASC") ; private String value; Field(String value){ @@ -284,7 +351,7 @@ public class WxBillProperty implements Serializable { sb.append(","); sb.append(fields[k].toString()); } - + this.sortColumns = sb.toString(); } public void setSortColumns(String sortColumns) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java index 87fc9ce79..5f0540a43 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillPropertyDeposit.java @@ -71,7 +71,7 @@ public class WxBillPropertyDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1未到期2待缴3欠缴4已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期5已退还", name = "status") private Integer status; /*是否删除 是1否0 未到期不显示**/ @io.swagger.annotations.ApiModelProperty(value="是否删除 是1否0 未到期不显示",name="isDel") @@ -101,6 +101,9 @@ public class WxBillPropertyDeposit implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "退还金额", name = "returnPrice") + private Integer returnPrice; + public Date getStarttime() { return starttime; } @@ -232,6 +235,14 @@ public class WxBillPropertyDeposit implements Serializable { this.rentShopType = rentShopType; } + public Integer getReturnPrice() { + return returnPrice; + } + + public void setReturnPrice(Integer returnPrice) { + this.returnPrice = returnPrice; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java index 74136464f..995a56f85 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBillRent.java @@ -71,7 +71,7 @@ public class WxBillRent implements Serializable { @io.swagger.annotations.ApiModelProperty(value="欠缴",name="owe") private Integer owe; /*账单状态1未到期2待缴3逾期未缴4部分逾期5已结清**/ - @io.swagger.annotations.ApiModelProperty(value="账单状态1未到期2待缴3欠缴4已结清",name="status") + @io.swagger.annotations.ApiModelProperty(value = "账单状态1欠缴2待缴3已结清4未到期", name = "status") private Integer status; /*是否删除 是1否0 未到期不显示**/ @io.swagger.annotations.ApiModelProperty(value="是否删除 是1否0 未到期不显示",name="isDel") @@ -103,6 +103,32 @@ public class WxBillRent implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "租赁商铺类型", name = "rentShopType") private Integer rentShopType; + @io.swagger.annotations.ApiModelProperty(value = "营业额", name = "revenue") + private Integer revenue; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金费率", name = "latePayRatio") + private Integer latePayRatio; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金时间", name = "latePayTime") + private Date latePayTime; + + @io.swagger.annotations.ApiModelProperty(value = "滞纳金总额", name = "latePayPrice") + private Integer latePayPrice; + + @io.swagger.annotations.ApiModelProperty(value = "账期", name = "period") + private Integer period; + + @io.swagger.annotations.ApiModelProperty(value = "预览账单0否1是", name = "isPreview") + private Integer isPreview; + + public Integer getIsPreview() { + return isPreview; + } + + public void setIsPreview(Integer isPreview) { + this.isPreview = isPreview; + } + public Date getStarttime() { return starttime; } @@ -234,6 +260,46 @@ public class WxBillRent implements Serializable { this.rentShopType = rentShopType; } + public Integer getRevenue() { + return revenue; + } + + public void setRevenue(Integer revenue) { + this.revenue = revenue; + } + + public Integer getLatePayRatio() { + return latePayRatio; + } + + public void setLatePayRatio(Integer latePayRatio) { + this.latePayRatio = latePayRatio; + } + + public Date getLatePayTime() { + return latePayTime; + } + + public void setLatePayTime(Date latePayTime) { + this.latePayTime = latePayTime; + } + + public Integer getLatePayPrice() { + return latePayPrice; + } + + public void setLatePayPrice(Integer latePayPrice) { + this.latePayPrice = latePayPrice; + } + + public Integer getPeriod() { + return period; + } + + public void setPeriod(Integer period) { + this.period = period; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -252,6 +318,7 @@ public class WxBillRent implements Serializable { ,MerchantId_ASC("`merchantId` ASC"),MerchantId_DESC("`merchantId` DESC") ,UserId_ASC("`userId` ASC"),UserId_DESC("`userId` DESC") ,ShopId_ASC("`shopId` ASC"),ShopId_DESC("`shopId` DESC") + ,Period_ASC("`period` ASC") ; private String value; Field(String value){ @@ -284,7 +351,7 @@ public class WxBillRent implements Serializable { sb.append(","); sb.append(fields[k].toString()); } - + this.sortColumns = sb.toString(); } public void setSortColumns(String sortColumns) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java index 9ce05a2cd..eb3cd8625 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUser.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.iformall.utils.BaseConstant; import javax.persistence.*; @@ -11,6 +12,7 @@ import javax.persistence.Id; import java.io.Serializable; @Table(name = "wx_c_user") +@JsonIgnoreProperties(ignoreUnknown = true) public class WxCUser implements Serializable { private static final long serialVersionUID = 1L; @@ -461,15 +463,14 @@ public class WxCUser implements Serializable { } } - public void createToken(Date currentDate) { + public String createToken(Date currentDate) { if (expireTime == null || expireTime.getTime() < currentDate.getTime()) { //生成一个token - String token = UUID.randomUUID().toString(); + this.token = UUID.randomUUID().toString(); //过期时间 - Date expireTime = new Date(currentDate.getTime() + BaseConstant.EXPIRE * 1000); - setToken(token); - setExpireTime(expireTime); + this.expireTime = new Date(currentDate.getTime() + BaseConstant.EXPIRE * 1000); } + return this.token; } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java index 2ef9dc477..58ab5a411 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java @@ -2,12 +2,12 @@ package com.iformall.domain.po; import lombok.Data; -import javax.persistence.*; -import java.util.*; -import javax.persistence.Transient; -import java.util.List; import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; import java.io.Serializable; +import java.util.Date; +import java.util.List; @Table(name = "wx_card_info") @Data @@ -56,6 +56,9 @@ public class WxCardInfo implements Serializable { @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; + @io.swagger.annotations.ApiModelProperty(value = "是否支持转送(0:不支持,1支持)", name = "supportTransfer") + private Integer supportTransfer; + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java new file mode 100644 index 000000000..014f0cbf4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java @@ -0,0 +1,165 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_card_transfer_info") +public class WxCardTransferInfo implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + + //保存到转赠表中 id,coupon_order_id,tenant_id,title,amount,remain_amount,from_user,to_user,status,create_date,update_date + + @io.swagger.annotations.ApiModelProperty(value = "卡与订单关联ID", name = "couponOrderId") + private Long couponOrderId; + + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + + @io.swagger.annotations.ApiModelProperty(value = "卡名称", name = "title") + private String title; + + @io.swagger.annotations.ApiModelProperty(value = "面额", name = "amount") + private Integer amount; + + @io.swagger.annotations.ApiModelProperty(value = "余额", name = "remainAmount") + private Integer remainAmount; + + @io.swagger.annotations.ApiModelProperty(value = "转赠者", name = "fromUser") + private Long fromUser; + + @io.swagger.annotations.ApiModelProperty(value = "领取者", name = "toUser") + private Long toUser; + + @io.swagger.annotations.ApiModelProperty(value = "状态", name = "status") + private Integer status; + + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate") + private Date createDate; + + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "updateDate") + private Date updateDate; + + @io.swagger.annotations.ApiModelProperty(value = "过期时间", name = "expiredTime") + private Date expiredTime; + + public Long getCouponOrderId() { + return couponOrderId; + } + + public void setCouponOrderId(Long couponOrderId) { + this.couponOrderId = couponOrderId; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public Integer getRemainAmount() { + return remainAmount; + } + + public void setRemainAmount(Integer remainAmount) { + this.remainAmount = remainAmount; + } + + public Long getFromUser() { + return fromUser; + } + + public void setFromUser(Long fromUser) { + this.fromUser = fromUser; + } + + public Long getToUser() { + return toUser; + } + + public void setToUser(Long toUser) { + this.toUser = toUser; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public Date getExpiredTime() { + return expiredTime; + } + + public void setExpiredTime(Date expiredTime) { + this.expiredTime = expiredTime; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxChartDataEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/WxChartDataEntity.java new file mode 100644 index 000000000..3b47c9c26 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxChartDataEntity.java @@ -0,0 +1,35 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Table(name = "wx_chart_data") +@Data +public class WxChartDataEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + private String tenantId; + private Integer type; + private String result; + private Date querytime; + private Date createtime; + + @Override + public String toString() { + return "WxChartDataEntity{" + + "id=" + id + + ", tenantId='" + tenantId + '\'' + + ", type=" + type + + ", result='" + result + '\'' + + ", querytime=" + querytime + + ", createtime=" + createtime + + '}'; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java b/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java new file mode 100644 index 000000000..f31a85f7f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxComponentVerifyTicket.java @@ -0,0 +1,97 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "wx_component_verify_ticket") +@Data +public class WxComponentVerifyTicket implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + /**微信第三方componentAppid*/ + @io.swagger.annotations.ApiModelProperty(value="微信第三方componentAppid",name="componentAppid") + private String componentAppid; + /**微信第三方component_verify_ticket*/ + @io.swagger.annotations.ApiModelProperty(value="微信第三方component_verify_ticket",name="componentVerifyTicket") + private String componentVerifyTicket; + /**创建时间*/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") + private Date createTime; + /**失效时间*/ + @io.swagger.annotations.ApiModelProperty(value="失效时间",name="deadline") + private Date deadline; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,ComponentAppid_ASC("`component_appid` ASC"),ComponentAppid_DESC("`component_appid` DESC") + ,ComponentVerifyTicket_ASC("`component_verify_ticket` ASC"),ComponentVerifyTicket_DESC("`component_verify_ticket` DESC") + ,CreateTime_ASC("`create_time` ASC"),CreateTime_DESC("`create_time` DESC") + ,Deadline_ASC("`deadline` ASC"),Deadline_DESC("`deadline` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxComponentVerifyTicket.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index 2518186a1..d9cb09b63 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +import org.apache.commons.lang3.StringUtils; + import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -14,7 +16,7 @@ public class WxCoupon implements Serializable { @Id protected Long id; - + @Transient protected List ids; @Transient @@ -62,10 +64,6 @@ public class WxCoupon implements Serializable { @Transient private Date enddate; - - @Transient - private String merchantParams; - /**租户ID**/ @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") private String tenantId; @@ -138,6 +136,11 @@ public class WxCoupon implements Serializable { /**是否支持转送(0:不支持,1支持)**/ @io.swagger.annotations.ApiModelProperty(value="是否支持转送(0:不支持,1支持)",name="supportTransfer") private Integer supportTransfer; + + /**过期退款(0:正常,1不退)**/ + @io.swagger.annotations.ApiModelProperty(value="过期退款(0:正常,1不退)",name="autoRefund") + private Integer autoRefund; + /**补贴类型(0:不支持, 1:微信支付立减与折扣, 2:线下结算, 3:微信付款到银行卡 )**/ @io.swagger.annotations.ApiModelProperty(value="补贴类型(0:不支持, 1:微信支付立减与折扣, 2:线下结算, 3:微信付款到银行卡)",name="subsidyType") private Integer subsidyType; @@ -153,6 +156,158 @@ public class WxCoupon implements Serializable { @io.swagger.annotations.ApiModelProperty(value="砍价限制时间",name="pressLimitHours") private Integer pressLimitHours; + @Transient + private String merchantParams; + + //营销分析-----start----- + @Transient + private String xtime; + @Transient + private Long xcount; + /**售出卡数量**/ + @io.swagger.annotations.ApiModelProperty(value="售出卡数量",name="saleCount") + @Transient + private Long saleCount; + /**转增数量**/ + @io.swagger.annotations.ApiModelProperty(value="转增数量",name="transferCount") + @Transient + private Long transferCount; + /**售出金额**/ + @io.swagger.annotations.ApiModelProperty(value="售出金额",name="saleAmount") + @Transient + private Integer saleAmount; + /**核销数量**/ + @io.swagger.annotations.ApiModelProperty(value="核销数量",name="sumPayment") + @Transient + private Integer sumPayment; + /**退款数量**/ + @io.swagger.annotations.ApiModelProperty(value="退款数量",name="backpayCount") + @Transient + private Integer backpayCount; + + /**砍价发起次数**/ + @io.swagger.annotations.ApiModelProperty(value="砍价发起次数",name="pressSendCount") + @Transient + private Integer pressSendCount; + /**砍价成功次数**/ + @io.swagger.annotations.ApiModelProperty(value="砍价成功次数",name="pressSuccCount") + @Transient + private Integer pressSuccCount; + /**砍价参与人数**/ + @io.swagger.annotations.ApiModelProperty(value="砍价参与人数",name="pressJoinCount") + @Transient + private Integer pressJoinCount; + + /**商场补贴**/ + @io.swagger.annotations.ApiModelProperty(value="商场补贴",name="sumSubsidy") + @Transient + private Integer sumSubsidy; + /**核销比**/ + @io.swagger.annotations.ApiModelProperty(value="核销比",name="paymentRate") + @Transient + private String paymentRate; + + //营销分析-----end----- + + + public Integer getSumSubsidy() { + return sumSubsidy; + } + + public void setSumSubsidy(Integer sumSubsidy) { + this.sumSubsidy = sumSubsidy; + } + + public String getPaymentRate() { + return paymentRate; + } + + public void setPaymentRate(String paymentRate) { + if(StringUtils.isNotBlank(paymentRate)) { + if ("0.00".equals(paymentRate)) { + this.paymentRate = "0%"; + } else { + this.paymentRate = paymentRate + "%"; + } + } + } + + public Integer getPressSendCount() { + return pressSendCount; + } + + public void setPressSendCount(Integer pressSendCount) { + this.pressSendCount = pressSendCount; + } + + public Integer getPressSuccCount() { + return pressSuccCount; + } + + public void setPressSuccCount(Integer pressSuccCount) { + this.pressSuccCount = pressSuccCount; + } + + public Integer getPressJoinCount() { + return pressJoinCount; + } + + public void setPressJoinCount(Integer pressJoinCount) { + this.pressJoinCount = pressJoinCount; + } + + public Long getXcount() { + return xcount; + } + + public void setXcount(Long xcount) { + this.xcount = xcount; + } + + public Integer getBackpayCount() { + return backpayCount; + } + + public void setBackpayCount(Integer backpayCount) { + this.backpayCount = backpayCount; + } + + public Long getSaleCount() { + return saleCount; + } + + public void setSaleCount(Long saleCount) { + this.saleCount = saleCount; + } + + public Long getTransferCount() { + return transferCount; + } + + public void setTransferCount(Long transferCount) { + this.transferCount = transferCount; + } + + public Integer getSaleAmount() { + return saleAmount; + } + + public void setSaleAmount(Integer saleAmount) { + this.saleAmount = saleAmount; + } + + public Integer getSumPayment() { + return sumPayment; + } + + public void setSumPayment(Integer sumPayment) { + this.sumPayment = sumPayment; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + public String getTenantId() { return tenantId; } @@ -409,6 +564,14 @@ public class WxCoupon implements Serializable { this.pressLimitHours = pressLimitHours; } + public Integer getAutoRefund() { + return autoRefund; + } + + public void setAutoRefund(Integer autoRefund) { + this.autoRefund = autoRefund; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") @@ -491,4 +654,12 @@ public class WxCoupon implements Serializable { this.setSortColumns(Field.valueOf(sortColumns)); } } + + public String getXtime() { + return xtime; + } + + public void setXtime(String xtime) { + this.xtime = xtime; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java index 9c8938a2f..d883f5ee0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponChannel.java @@ -1,11 +1,11 @@ package com.iformall.domain.po; -import javax.persistence.*; -import java.util.*; -import javax.persistence.Transient; -import java.util.List; import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; import java.io.Serializable; +import java.util.Date; +import java.util.List; @Table(name = "wx_coupon_channel") public class WxCouponChannel implements Serializable { @@ -40,15 +40,14 @@ public class WxCouponChannel implements Serializable { this.ids = ids; } - @Transient - private Integer isCRequest; - @Transient private Date startdate; @Transient private Date enddate; + @Transient + private Integer supportTransfer; @Transient protected List couponIds; @@ -98,13 +97,6 @@ public class WxCouponChannel implements Serializable { @io.swagger.annotations.ApiModelProperty(value="子频道ID",name="subTargetId") private Long subTargetId; - public Integer getIsCRequest() { - return isCRequest; - } - - public void setIsCRequest(Integer isCRequest) { - this.isCRequest = isCRequest; - } public String getTenantId() { return tenantId; @@ -197,7 +189,13 @@ public class WxCouponChannel implements Serializable { this.enddate = enddate; } + public Integer getSupportTransfer() { + return supportTransfer; + } + public void setSupportTransfer(Integer supportTransfer) { + this.supportTransfer = supportTransfer; + } public static enum Field { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java index cedb05362..b1f93eaed 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -77,7 +77,11 @@ public class WxCouponOrder implements Serializable { /**单券实际购买价格**/ @io.swagger.annotations.ApiModelProperty(value = "单券实际购买价格", name = "couponPrice") private Integer couponPrice; - + + /**过期退款(0:正常,1不退)**/ + @io.swagger.annotations.ApiModelProperty(value="过期退款(0:正常,1不退)",name="autoRefund") + private Integer autoRefund; + @Transient private String couponName; @Transient @@ -152,14 +156,6 @@ public class WxCouponOrder implements Serializable { this.couponType = couponType; } - public Long getCUserId() { - return cUserId; - } - - public void setCUserId(Long _cUserId) { - cUserId = _cUserId; - } - public Long getOwnerId() { return ownerId; } @@ -168,14 +164,6 @@ public class WxCouponOrder implements Serializable { this.ownerId = ownerId; } - public Long getBUserId() { - return bUserId; - } - - public void setBUserId(Long _bUserId) { - bUserId = _bUserId; - } - public Long getOrderId() { return orderId; } @@ -224,6 +212,30 @@ public class WxCouponOrder implements Serializable { couponPrice = _couponPrice; } + public Long getcUserId() { + return cUserId; + } + + public void setcUserId(Long cUserId) { + this.cUserId = cUserId; + } + + public Long getbUserId() { + return bUserId; + } + + public void setbUserId(Long bUserId) { + this.bUserId = bUserId; + } + + public Integer getAutoRefund() { + return autoRefund; + } + + public void setAutoRefund(Integer autoRefund) { + this.autoRefund = autoRefund; + } + public static enum Field { Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxDevice.java b/mallinkService/src/main/java/com/iformall/domain/po/WxDevice.java new file mode 100644 index 000000000..b62f16b2a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxDevice.java @@ -0,0 +1,265 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_device") +public class WxDevice implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + /**租户id**/ + @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") + private String tenantId; + + /**设备id**/ + @io.swagger.annotations.ApiModelProperty(value="设备id",name="deviceId") + private String deviceId; + + /**设备类型**/ + @io.swagger.annotations.ApiModelProperty(value="设备类型",name="type") + private Integer type; + + /**设备状态**/ + @io.swagger.annotations.ApiModelProperty(value="设备状态",name="status") + private Integer status; + + /**版本号信息**/ + @io.swagger.annotations.ApiModelProperty(value="版本号信息",name="version") + private String version; + + /**设备名**/ + @io.swagger.annotations.ApiModelProperty(value="设备名",name="name") + private String name; + + /**设备位置**/ + @io.swagger.annotations.ApiModelProperty(value="设备位置",name="location") + private String location; + + /**创建时间**/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + /**更新时间**/ + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + /**在线状态**/ + @io.swagger.annotations.ApiModelProperty(value="在线状态",name="onlineStatus") + private Integer onlineStatus; + + /**第一次连线时间**/ + @io.swagger.annotations.ApiModelProperty(value="第一次连线时间",name="firstHbTime") + private Date firstHbTime; + + /**最后一次在线时间**/ + @io.swagger.annotations.ApiModelProperty(value="最后一次在线时间",name="lastHbTime") + private Date lastHbTime; + + /**需要执行的命令**/ + @io.swagger.annotations.ApiModelProperty(value="最后一次在线时间",name="hbCmd") + private Integer hbCmd; + + public String getTenantId() { + return tenantId; + } + public void setTenantId(String _tenantId) { + tenantId = _tenantId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public Integer getOnlineStatus() { + return onlineStatus; + } + + public void setOnlineStatus(Integer onlineStatus) { + this.onlineStatus = onlineStatus; + } + + public Date getFirstHbTime() { + return firstHbTime; + } + + public void setFirstHbTime(Date firstHbTime) { + this.firstHbTime = firstHbTime; + } + + public Date getLastHbTime() { + return lastHbTime; + } + + public void setLastHbTime(Date lastHbTime) { + this.lastHbTime = lastHbTime; + } + + public Integer getHbCmd() { + return hbCmd; + } + + public void setHbCmd(Integer hbCmd) { + this.hbCmd = hbCmd; + } + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") + ,DeviceId_ASC("`device_id` ASC"),DeviceId_DESC("`device_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,Status_ASC("`status` ASC"),Status_DESC("`status` DESC") + ,Version_ASC("`version` ASC"),Version_DESC("`version` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ,LastHbTime_ASC("`last_hb_time` ASC"),LastHbTime_DESC("`last_hb_time` DESC") + ,FirstHbTime_ASC("`first_hb_time` ASC"),FirstHbTime_DESC("`first_hb_time` DESC") + ,OnlineStatus_ASC("`online_status` ASC"),OnlineStatus_DESC("`online_status` DESC") + ,HbCmd_ASC("`hb_cmd` ASC"),HbCmd_DESC("`hb_cmd` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxDevice.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + + this.sortColumns = sb.toString(); + + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java index 2f8ce572a..be494c6ce 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxFlowRecord.java @@ -26,6 +26,12 @@ public class WxFlowRecord implements Serializable { private String tenantId; private String taskKey; // key private String taskName;// 名称 + private Integer currStatus;// 当前状态 + private String variables;// 流程附加值 + + private String contractType; + private String contractNumber; + private Integer endProperty; @Transient protected List ids; @@ -38,11 +44,55 @@ public class WxFlowRecord implements Serializable { public WxFlowRecord(Long businessId){ this.businessId = businessId; } + public WxFlowRecord(String processInstanceId,Integer currStatus){ + this.processInstanceId = processInstanceId; + this.currStatus = currStatus; + } public WxFlowRecord(Long businessId,String tenantId){ this.businessId = businessId; this.tenantId = tenantId; } + public String getVariables() { + return variables; + } + + public void setVariables(String variables) { + this.variables = variables; + } + + public String getContractType() { + return contractType; + } + + public void setContractType(String contractType) { + this.contractType = contractType; + } + + public String getContractNumber() { + return contractNumber; + } + + public void setContractNumber(String contractNumber) { + this.contractNumber = contractNumber; + } + + public Integer getEndProperty() { + return endProperty; + } + + public void setEndProperty(Integer endProperty) { + this.endProperty = endProperty; + } + + public Integer getCurrStatus() { + return currStatus; + } + + public void setCurrStatus(Integer currStatus) { + this.currStatus = currStatus; + } + public Integer getIsLastStart() { return isLastStart; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java b/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java index b060301e4..f75860d99 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxGame.java @@ -60,9 +60,14 @@ public class WxGame implements Serializable { /** * 玩次数限制 */ - @io.swagger.annotations.ApiModelProperty(value = "触发条件(0:不受限制,n:限玩次数)", name = "playLimit") + @io.swagger.annotations.ApiModelProperty(value = "限玩次数(0:不受限制,n:限玩次数)", name = "playLimit") private Integer playLimit; + /** + * 获奖次数限制 + */ + @io.swagger.annotations.ApiModelProperty(value = "限奖次数(0:不受限制,n:限奖次数)", name = "awardLimit") + private Integer awardLimit; @Transient @io.swagger.annotations.ApiModelProperty(value = "已投放券信息") @@ -189,6 +194,61 @@ public class WxGame implements Serializable { this.couponIdsList = couponIdsList; } + public Integer getAwardLimit() { + return awardLimit; + } + + public void setAwardLimit(Integer awardLimit) { + this.awardLimit = awardLimit; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + public Integer getOptionLimit() { + return optionLimit; + } + + public void setOptionLimit(Integer optionLimit) { + this.optionLimit = optionLimit; + } + + public String getRules() { + return rules; + } + + public void setRules(String rules) { + this.rules = rules; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } public void setGameTemplate(WxGameTemplate gameTemplate) { if (gameTemplate != null) { @@ -209,7 +269,8 @@ public class WxGame implements Serializable { , ValidStartDate_ASC("`valid_start_date` ASC"), ValidStartDate_DESC("`valid_start_date` DESC") , ValidEndDate_ASC("`valid_end_date` ASC"), ValidEndDate_DESC("`valid_end_date` DESC") , TriggleAction_ASC("`triggle_action` ASC"), TriggleAction_DESC("`triggle_action` DESC") - , PlayLimit_ASC("`play_limit` ASC"), PlayLimit_DESC("`play_limit` DESC"); + , PlayLimit_ASC("`play_limit` ASC"), PlayLimit_DESC("`play_limit` DESC") + , AwardLimit_ASC("`award_limit` ASC"), AwardLimit_DESC("`award_limit` DESC"); private String value; Field(String value) { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java index 5d6e8fa55..69ad6c904 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java @@ -82,12 +82,27 @@ public class WxMall implements Serializable { @io.swagger.annotations.ApiModelProperty(value="商场图标",name="imgUrlH") private String imgUrlH; + @io.swagger.annotations.ApiModelProperty(value="小程序二维码",name="imgQrcodeWeapp") + private String imgQrcodeWeapp; + @io.swagger.annotations.ApiModelProperty(value="公众平台二维码",name="imgQrcodeWemp") + private String imgQrcodeWemp; + @io.swagger.annotations.ApiModelProperty(value="小程序提示",name="weapNote") private String weapNote; @Transient protected List buildings; + private String imgWeappQrcode; + + public String getImgWeappQrcode() { + return imgWeappQrcode; + } + + public void setImgWeappQrcode(String imgWeappQrcode) { + this.imgWeappQrcode = imgWeappQrcode; + } + public String getTenantId() { return tenantId; } @@ -195,6 +210,22 @@ public class WxMall implements Serializable { this.buildings = buildings; } + public String getImgQrcodeWeapp() { + return imgQrcodeWeapp; + } + + public void setImgQrcodeWeapp(String imgQrcodeWeapp) { + this.imgQrcodeWeapp = imgQrcodeWeapp; + } + + public String getImgQrcodeWemp() { + return imgQrcodeWemp; + } + + public void setImgQrcodeWemp(String imgQrcodeWemp) { + this.imgQrcodeWemp = imgQrcodeWemp; + } + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java index c5ee99bfd..35b3a5ecf 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java @@ -8,7 +8,7 @@ import java.util.Date; import java.util.List; @Table(name = "wx_msg") -public class WxMsg implements Serializable { +public class WxMsg extends BaseMsg { private static final long serialVersionUID = 1L; @Id @@ -39,7 +39,6 @@ public class WxMsg implements Serializable { this.ids = ids; } - /*租户ID**/ @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") private String tenantId; @@ -101,6 +100,27 @@ public class WxMsg implements Serializable { @Transient List tagsList; + //用于mq发送消息 + private WxMsgConfig wxMsgConfig; + private WxCouponInject couponInject; + + + public WxMsgConfig getWxMsgConfig() { + return wxMsgConfig; + } + + public void setWxMsgConfig(WxMsgConfig wxMsgConfig) { + this.wxMsgConfig = wxMsgConfig; + } + + public WxCouponInject getCouponInject() { + return couponInject; + } + + public void setCouponInject(WxCouponInject couponInject) { + this.couponInject = couponInject; + } + public String getTenantId() { return tenantId; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java new file mode 100644 index 000000000..f1bcc5786 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java @@ -0,0 +1,199 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; +import java.util.Map; + +@Table(name = "wx_msg_record") +public class WxMsgRecord extends BaseMsg { + private static final long serialVersionUID = 18957895653478L; + + @Id + protected Long id; + //租户id + private String tenantId; + //域1sys 2a端 3c端 4b端 + private Integer domain; + //msg 消息类型1短信 2回调短信 邮件 3微信小程序模板 4微信公众号模板 5系统通 + private String msg; + //发送时间 + private String sendTime; + //model_id + private Long modelId; + //from,手机号邮件地址等 + private String sender; + //发送人id + private Long senderUserId; + //发送人姓名 + private String senderUserName; + //接收人,手机号邮件地址等 + private String receiver; + //接收人用户id + private Long receiverUserId; + //接收人姓名 + private String receiverUserName; + //签名 + private String signature; + //模板类型 + private Integer modelType; + //消息json + private String msgJson; + + private Date createtime; + private Date updatetime; + + //动态替换内容 + private Map dynamicContentMap; + + + public String getMsgJson() { + return msgJson; + } + + public void setMsgJson(String msgJson) { + this.msgJson = msgJson; + } + + public Map getDynamicContentMap() { + return dynamicContentMap; + } + + + public void setDynamicContentMap(Map dynamicContentMap) { + this.dynamicContentMap = dynamicContentMap; + } + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getDomain() { + return domain; + } + + public void setDomain(Integer domain) { + this.domain = domain; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public Long getSenderUserId() { + return senderUserId; + } + + public void setSenderUserId(Long senderUserId) { + this.senderUserId = senderUserId; + } + + public String getSenderUserName() { + return senderUserName; + } + + public void setSenderUserName(String senderUserName) { + this.senderUserName = senderUserName; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + public Long getReceiverUserId() { + return receiverUserId; + } + + public void setReceiverUserId(Long receiverUserId) { + this.receiverUserId = receiverUserId; + } + + public String getReceiverUserName() { + return receiverUserName; + } + + public void setReceiverUserName(String receiverUserName) { + this.receiverUserName = receiverUserName; + } + + public Integer getModelType() { + return modelType; + } + + public void setModelType(Integer modelType) { + this.modelType = modelType; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getSendTime() { + return sendTime; + } + + public void setSendTime(String sendTime) { + this.sendTime = sendTime; + } + + public Long getModelId() { + return modelId; + } + + public void setModelId(Long modelId) { + this.modelId = modelId; + } + + public Date getCreatetime() { + return createtime; + } + + public void setCreatetime(Date createtime) { + this.createtime = createtime; + } + + public Date getUpdatetime() { + return updatetime; + } + + public void setUpdatetime(Date updatetime) { + this.updatetime = updatetime; + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index 64286cd77..35f120bc3 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -61,7 +61,7 @@ public class WxOrder implements Serializable { @io.swagger.annotations.ApiModelProperty(value="渠道ID",name="couponChannelId") private Long couponChannelId; /**产品ID,根据order type**/ - @io.swagger.annotations.ApiModelProperty(value="产品ID",name="productId") + @io.swagger.annotations.ApiModelProperty(value="产品ID(type-0:couponId, 1:buserId, 3:merchantId)",name="productId") private Long productId; /**类型0:券,1:B刷卡支付,2:C扫码支付,3:储值卡**/ @io.swagger.annotations.ApiModelProperty(value="类型",name="type") @@ -105,7 +105,8 @@ public class WxOrder implements Serializable { @Transient protected String statusStr; - + @io.swagger.annotations.ApiModelProperty(value = "拼团ID", name = "orderGroupId") + private Long orderGroupId; public Long getOrderNumber() { return orderNumber; @@ -186,7 +187,15 @@ public class WxOrder implements Serializable { this.cUserId = cUserId; } - public Long getCouponChannelId() { + public Long getCUserId() { + return cUserId; + } + + public void setCUserId(Long _cUserId) { + cUserId = _cUserId; + } + + public Long getCouponChannelId() { return couponChannelId; } @@ -258,7 +267,15 @@ public class WxOrder implements Serializable { this.statusStr = statusStr; } - public static enum Field + public Long getOrderGroupId() { + return orderGroupId; + } + + public void setOrderGroupId(Long orderGroupId) { + this.orderGroupId = orderGroupId; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,OrderNumber_ASC("`order_number` ASC"),OrderNumber_DESC("`order_number` DESC") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrderGroup.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrderGroup.java new file mode 100644 index 000000000..4190f4df9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrderGroup.java @@ -0,0 +1,146 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_order_group") +@Data +public class WxOrderGroup implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + /** + * 租户ID + **/ + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + /** + * 订单ID + */ + @io.swagger.annotations.ApiModelProperty(value = "订单ID", name = "orderId") + private Long orderId; + /** + * 券ID + */ + @io.swagger.annotations.ApiModelProperty(value = "参与人ID", name = "userId") + private Long couponId; + /** + * 剩余人数 + */ + @io.swagger.annotations.ApiModelProperty(value = "剩余人数", name = "remainPeople") + private Integer remainPeople; + /** + * 过期时间 + */ + @io.swagger.annotations.ApiModelProperty(value = "过期时间", name = "expiredDate") + private Date expiredDate; + /** + * 创建时间 + */ + @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate") + private Date createDate; + /** + * 更新时间 + */ + @io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updateDate") + private Date updateDate; + /** + * 状态 + */ + @io.swagger.annotations.ApiModelProperty(value = "状态", name = "status") + private Integer status; + + @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "userId") + private Long userId; + + public static enum Field { + Id_ASC("`id` ASC"), Id_DESC("`id` DESC"); + private String value; + + Field(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setCol(String value) { + this.value = value; + } + + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxOrder.Field... fields) { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + + } + + public void setSortColumns(String sortColumns) { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(WxOrder.Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new WxOrder.Field[fList.size()])); + } else { + this.setSortColumns(WxOrder.Field.valueOf(sortColumns)); + } + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java index 60b2f5594..b7d07aba4 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -98,6 +98,8 @@ public class WxPayOrder implements Serializable { /**支付失败原因**/ @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") private String failReason; + @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") + private Integer payEndFrom; public String getTenantId() { return tenantId; } @@ -227,9 +229,15 @@ public class WxPayOrder implements Serializable { failReason = _failReason; } + public Integer getPayEndFrom() { + return payEndFrom; + } + public void setPayEndFrom(Integer payEndFrom) { + this.payEndFrom = payEndFrom; + } - public static enum Field + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") @@ -251,6 +259,7 @@ public class WxPayOrder implements Serializable { ,Share_ASC("`share` ASC"),Share_DESC("`share` DESC") ,ShareAmount_ASC("`share_amount` ASC"),ShareAmount_DESC("`share_amount` DESC") ,FailReason_ASC("`fail_reason` ASC"),FailReason_DESC("`fail_reason` DESC") + ,PayEndFrom_ASC("`pay_end_from` ASC"),PayEndFrom_DESC("`pay_end_from` DESC") ; private String value; Field(String value){ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java index 987394893..02f953189 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPropertyContract.java @@ -21,6 +21,8 @@ public class WxPropertyContract implements Serializable { // 审核状态,0未审核 1审核中 2审核完成 3驳回 4合同作废 private Integer applyStatus; + // 审批流1合同2账单3终止审批 + private Integer businessType; @Transient protected List ids; @@ -164,6 +166,40 @@ public class WxPropertyContract implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "审批流参数", name = "flowParams") private Map flowParams; + @io.swagger.annotations.ApiModelProperty(value = "调整比例", name = "adjustRatio") + private String adjustRatio; + + + // 物业预账单列表 + @Transient + @io.swagger.annotations.ApiModelProperty(value = "物业预账单列表", name = "previewBillRentList") + private List previewBillRentList; + + + public String getAdjustRatio() { + return adjustRatio; + } + + public void setAdjustRatio(String adjustRatio) { + this.adjustRatio = adjustRatio; + } + + public List getPreviewBillRentList() { + return previewBillRentList; + } + + public void setPreviewBillRentList(List previewBillRentList) { + this.previewBillRentList = previewBillRentList; + } + + public Integer getBusinessType() { + return businessType; + } + + public void setBusinessType(Integer businessType) { + this.businessType = businessType; + } + public Map getFlowParams() { return flowParams; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java index 0470a89bb..8888b8295 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContract.java @@ -56,6 +56,9 @@ public class WxRentContract implements Serializable { @Transient private String brandName; + @Transient + private String buildArea; + public String getBuilding() { return building; } @@ -185,6 +188,10 @@ public class WxRentContract implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "审核状态", name = "applyStatus") private Integer applyStatus; + // 审批流1合同2账单3终止审批 + @io.swagger.annotations.ApiModelProperty(value = "审批流类型", name = "businessType") + private Integer businessType; + @io.swagger.annotations.ApiModelProperty(value = "开户行", name = "bankName") private String bankName; @@ -195,6 +202,62 @@ public class WxRentContract implements Serializable { @io.swagger.annotations.ApiModelProperty(value = "审批流参数", name = "flowParams") private Map flowParams; + @io.swagger.annotations.ApiModelProperty(value = "装修期开始时间", name = "fixStartDate") + private Date fixStartDate; + + @io.swagger.annotations.ApiModelProperty(value = "装修期结束时间", name = "fixEndDate") + private Date fixEndDate; + + // 租赁合同预账单列表 + @Transient + @io.swagger.annotations.ApiModelProperty(value = "租赁合同预账单列表", name = "previewBillRentList") + private List previewBillRentList; + + // 物业合同预账单列表 + @Transient + @io.swagger.annotations.ApiModelProperty(value = "物业合同预账单列表", name = "reviewBillPropertyPList") + private List reviewBillPropertyPList; + + public List getReviewBillPropertyPList() { + return reviewBillPropertyPList; + } + + public void setReviewBillPropertyPList(List reviewBillPropertyPList) { + this.reviewBillPropertyPList = reviewBillPropertyPList; + } + + public List getPreviewBillRentList() { + return previewBillRentList; + } + + public void setPreviewBillRentList(List previewBillRentList) { + this.previewBillRentList = previewBillRentList; + } + + public Integer getBusinessType() { + return businessType; + } + + public void setBusinessType(Integer businessType) { + this.businessType = businessType; + } + + public Date getFixStartDate() { + return fixStartDate; + } + + public void setFixStartDate(Date fixStartDate) { + this.fixStartDate = fixStartDate; + } + + public Date getFixEndDate() { + return fixEndDate; + } + + public void setFixEndDate(Date fixEndDate) { + this.fixEndDate = fixEndDate; + } + public Map getFlowParams() { return flowParams; } @@ -499,6 +562,14 @@ public class WxRentContract implements Serializable { this.rentShopType = rentShopType; } + public String getBuildArea() { + return buildArea; + } + + public void setBuildArea(String buildArea) { + this.buildArea = buildArea; + } + public static enum Field { Id_ASC("`id` ASC"), Id_DESC("`id` DESC"), MerchantId_ASC("`merchant_id` ASC"), MerchantId_DESC("`merchant_id` DESC"), Price_ASC("`price` ASC"), Price_DESC("`price` DESC"), RentalStartDate_ASC("`rental_start_date` ASC"), RentalStartDate_DESC("`rental_start_date` DESC"), RentalEndDate_ASC("`rental_end_date` ASC"), RentalEndDate_DESC("`rental_end_date` DESC"), SignDate_ASC("`sign_date` ASC"), SignDate_DESC("`sign_date` DESC"), ReceivePeriod_ASC("`receive_period` ASC"), ReceivePeriod_DESC("`receive_period` DESC"), TenantId_ASC("`tenant_id` ASC"), TenantId_DESC("`tenant_id` DESC"), Filepath_ASC("`filepath` ASC"), Filepath_DESC("`filepath` DESC"), Status_ASC("`status` ASC"), Status_DESC("`status` DESC"), ContractNumber_ASC("`contract_number` ASC"), ContractNumber_DESC("`contract_number` DESC"), Deposit_ASC("`deposit` ASC"), Deposit_DESC("`deposit` DESC"), PayDate_ASC("`pay_date` ASC"), PayDate_DESC("`pay_date` DESC"), IsDel_ASC("`is_del` ASC"), IsDel_DESC("`is_del` DESC"), MerchantName_ASC("`merchant_name` ASC"), MerchantName_DESC("`merchant_name` DESC"), Brand_ASC("`brand` ASC"), Brand_DESC("`brand` DESC"), BusinessId_ASC("`business_id` ASC"), BusinessId_DESC("`business_id` DESC"), ShopType_ASC("`shop_type` ASC"), ShopType_DESC("`shop_type` DESC"), ShopId_ASC("`shop_id` ASC"), ShopId_DESC("`shop_id` DESC"), Updatetime_ASC("`updatetime` ASC"), Updatetime_DESC("`updatetime` DESC"), Createtime_ASC("`createtime` ASC"), Createtime_DESC("`createtime` DESC"); private String value; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxScreenAd.java b/mallinkService/src/main/java/com/iformall/domain/po/WxScreenAd.java new file mode 100644 index 000000000..16f9a4ef0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxScreenAd.java @@ -0,0 +1,236 @@ +package com.iformall.domain.po; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_screen_ad") +public class WxScreenAd implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSortColumns() { + return sortColumns; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + /**租户id**/ + @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") + private String tenantId; + + /**标题**/ + @io.swagger.annotations.ApiModelProperty(value="标题",name="title") + private String title; + + /**广告类型**/ + @io.swagger.annotations.ApiModelProperty(value="广告类型",name="type") + private Integer type; + + /**广告子类型 (券渠道)**/ + @io.swagger.annotations.ApiModelProperty(value="广告子类型",name="subType") + private Integer subType; + + /**广告状态**/ + @io.swagger.annotations.ApiModelProperty(value="设备状态",name="status") + private Integer status; + + /**创建时间**/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + + /**更新时间**/ + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + /**封面**/ + @io.swagger.annotations.ApiModelProperty(value="封面",name="coverImg") + private String coverImg; + + /**广告目标ID: couponChannelId or campaignId**/ + @io.swagger.annotations.ApiModelProperty(value="广告目标ID",name="targetId") + private Long targetId; + + /**广告目标二维码**/ + @io.swagger.annotations.ApiModelProperty(value="二维码",name="qrcode") + private byte[] qrcode; + + @Transient + protected Object target; + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getSubType() { + return subType; + } + + public void setSubType(Integer subType) { + this.subType = subType; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public String getCoverImg() { + return coverImg; + } + + public void setCoverImg(String coverImg) { + this.coverImg = coverImg; + } + + public Object getTarget() { + return target; + } + + public void setTarget(Object target) { + this.target = target; + } + + public Long getTargetId() { + return targetId; + } + + public void setTargetId(Long targetId) { + this.targetId = targetId; + } + + public byte[] getQrcode() { + return qrcode; + } + + public void setQrcode(byte[] qrcode) { + this.qrcode = qrcode; + } + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,SubType_ASC("`sub_type` ASC"),SubType_DESC("`sub_type` DESC") + ,Status_ASC("`status` ASC"),Status_DESC("`status` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxScreenAd.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + + this.sortColumns = sb.toString(); + + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java index 81cec1725..db4fc6dfe 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxTemplateMsg.java @@ -1,5 +1,7 @@ package com.iformall.domain.po; +import lombok.Data; + import javax.persistence.*; import java.util.*; import javax.persistence.Transient; @@ -8,6 +10,7 @@ import javax.persistence.Id; import java.io.Serializable; @Table(name = "wx_template_msg") +@Data public class WxTemplateMsg implements Serializable { private static final long serialVersionUID = 1L; @@ -18,26 +21,6 @@ public class WxTemplateMsg implements Serializable { protected List ids; @Transient protected String sortColumns; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getSortColumns() { - return sortColumns; - } - - public List getIds() { - return ids; - } - - public void setIds(List ids) { - this.ids = ids; - } /**租户ID**/ @@ -55,37 +38,6 @@ public class WxTemplateMsg implements Serializable { /**更新时间**/ @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; - public String getTenantId() { - return tenantId; - } - public void setTenantId(String _tenantId) { - tenantId = _tenantId; - } - public String getTemplateId() { - return templateId; - } - public void setTemplateId(String _templateId) { - templateId = _templateId; - } - public Integer getType() { - return type; - } - public void setType(Integer _type) { - type = _type; - } - public Date getCreateDate() { - return createDate; - } - public void setCreateDate(Date _createDate) { - createDate = _createDate; - } - public Date getUpdateDate() { - return updateDate; - } - public void setUpdateDate(Date _updateDate) { - updateDate = _updateDate; - } - public static enum Field diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java new file mode 100644 index 000000000..d36400456 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappAuditStatus.java @@ -0,0 +1,101 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_weapp_audit_status") +@Data +public class WxWeappAuditStatus implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") + private String appId; + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="用户版本",name="userVersion") + private String userVersion; + @io.swagger.annotations.ApiModelProperty(value="用户版本描述",name="versionDesc") + private String versionDesc; + @io.swagger.annotations.ApiModelProperty(value="auditid",name="auditid") + private Long auditid; + @io.swagger.annotations.ApiModelProperty(value="审核状态(0为审核成功,1:审核失败,2:审核中,3:已撤回)",name="auditStatus") + private Integer auditStatus; + @io.swagger.annotations.ApiModelProperty(value="审核错误码",name="auditErrCode") + private String auditErrCode; + @io.swagger.annotations.ApiModelProperty(value="审核时间",name="auditTime") + private Date auditTime; + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") + ,AuditTime_ASC("`audit_time` ASC"),AuditTime_DESC("`audit_time` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappAuditStatus.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappBasicSet.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappBasicSet.java new file mode 100644 index 000000000..6cb98885e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappBasicSet.java @@ -0,0 +1,109 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "wx_weapp_basic_set") +@Data +public class WxWeappBasicSet implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + /**小程序类型(1-B端 2-C端)*/ + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + /**部署类型(1:dev,2:test,3:prod)*/ + @io.swagger.annotations.ApiModelProperty(value="部署类型(1:dev,2:test,3:prod)",name="deploy") + private Integer deploy; + /**服务器域名*/ + @io.swagger.annotations.ApiModelProperty(value="服务器域名",name="domainUrl") + private String domainUrl; + /**小程序基础版本*/ + @io.swagger.annotations.ApiModelProperty(value="小程序基础版本",name="version") + private String version; + /**模板库信息*/ + @io.swagger.annotations.ApiModelProperty(value="模板库信息",name="templateInfo") + private String templateInfo; + /**创建时间*/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + /**更新时间*/ + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,Deploy_ASC("`deploy` ASC"),Deploy_DESC("`deploy` DESC") + ,DomainUrl_ASC("`domain_url` ASC"),DomainUrl_DESC("`domain_url` DESC") + ,Version_ASC("`version` ASC"),Version_DESC("`version` DESC") + ,TemplateInfo_ASC("`template_info` ASC"),TemplateInfo_DESC("`template_info` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappBasicSet.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java new file mode 100644 index 000000000..0ad54b1f6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappCodeStatus.java @@ -0,0 +1,104 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_weapp_code_status") +@Data +public class WxWeappCodeStatus implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + /**小程序ID*/ + @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") + private String appId; + /**小程序类型(1-B端 2-C端)*/ + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + /**用户版本*/ + @io.swagger.annotations.ApiModelProperty(value="用户版本",name="userVersion") + private String userVersion; + @io.swagger.annotations.ApiModelProperty(value="用户版本描述",name="versionDesc") + private String versionDesc; + /**code提交状态*/ + @io.swagger.annotations.ApiModelProperty(value="code提交状态(0:成功, 1:失败)",name="codeStatus") + private Integer codeStatus; + @io.swagger.annotations.ApiModelProperty(value="code提交错误码",name="codeErrCode") + private String codeErrCode; + /**更新时间*/ + @io.swagger.annotations.ApiModelProperty(value="code提交时间",name="codeTime") + private Date codeTime; + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") + ,CodeTime_ASC("`code_time` ASC"),CodeTime_DESC("`code_time` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappCodeStatus.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappExtSet.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappExtSet.java new file mode 100644 index 000000000..5372cb16e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappExtSet.java @@ -0,0 +1,105 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "wx_weapp_ext_set") +@Data +public class WxWeappExtSet implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + /**小程序ID*/ + @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") + private String appId; + /**小程序类型(1-B端 2-C端)*/ + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + /**小程序扩展信息*/ + @io.swagger.annotations.ApiModelProperty(value="小程序扩展信息",name="extJson") + private String extJson; + /**提交审核列表*/ + @io.swagger.annotations.ApiModelProperty(value="提交审核列表",name="releaseJson") + private String releaseJson; + /**创建时间*/ + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + /**更新时间*/ + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,ExtJson_ASC("`ext_json` ASC"),ExtJson_DESC("`ext_json` DESC") + ,ReleaseJson_ASC("`release_json` ASC"),ReleaseJson_DESC("`release_json` DESC") + ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") + ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappExtSet.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java new file mode 100644 index 000000000..a3d5fe1ce --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxWeappReleaseStatus.java @@ -0,0 +1,99 @@ +package com.iformall.domain.po; + +import lombok.Data; + +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Table(name = "wx_weapp_release_status") +@Data +public class WxWeappReleaseStatus implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId") + private String appId; + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + @io.swagger.annotations.ApiModelProperty(value="用户版本",name="userVersion") + private String userVersion; + @io.swagger.annotations.ApiModelProperty(value="用户版本描述",name="versionDesc") + private String versionDesc; + @io.swagger.annotations.ApiModelProperty(value="发布状态(0:发布成功, 1:发布失败, 2:发布中, 3:发布撤回)",name="releaseStatus") + private Integer releaseStatus; + @io.swagger.annotations.ApiModelProperty(value="发布错误码",name="releaseErrCode") + private String releaseErrCode; + @io.swagger.annotations.ApiModelProperty(value="发布时间",name="releaseTime") + private Date releaseTime; + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,AppId_ASC("`app_id` ASC"),AppId_DESC("`app_id` DESC") + ,Type_ASC("`type` ASC"),Type_DESC("`type` DESC") + ,UserVersion_ASC("`user_version` ASC"),UserVersion_DESC("`user_version` DESC") + ,ReleaseTime_ASC("`release_time` ASC"),ReleaseTime_DESC("`release_time` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappReleaseStatus.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/MallUserInfoVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/MallUserInfoVo.java new file mode 100644 index 000000000..07661dece --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/MallUserInfoVo.java @@ -0,0 +1,46 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.MallUserInfo; + +public class MallUserInfoVo extends MallUserInfo { + @io.swagger.annotations.ApiModelProperty(value="商场名",name="mallName") + private String mallName; + @io.swagger.annotations.ApiModelProperty(value="集团",name="mallGroup") + private String mallGroup; + @io.swagger.annotations.ApiModelProperty(value="商场图标",name="imgUrl") + private String imgUrl; + @io.swagger.annotations.ApiModelProperty(value="商场图标",name="imgUrlH") + private String imgUrlH; + + public String getMallName() { + return mallName; + } + + public void setMallName(String mallName) { + this.mallName = mallName; + } + + public String getMallGroup() { + return mallGroup; + } + + public void setMallGroup(String mallGroup) { + this.mallGroup = mallGroup; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String _imgUrl) { + this.imgUrl = _imgUrl; + } + + public String getImgUrlH() { + return imgUrlH; + } + + public void setImgUrlH(String imgUrlH) { + this.imgUrlH = imgUrlH; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java index 49487dd36..b88b2b49a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java @@ -56,6 +56,12 @@ public class WxCardCVo extends WxCouponOrder { @io.swagger.annotations.ApiModelProperty(value="卡消费列表",name="cardSpendList") private List cardSpendList; + @io.swagger.annotations.ApiModelProperty(value = "是否可转赠", name = "supportTransfer") + private Integer supportTransfer; + + @io.swagger.annotations.ApiModelProperty(value = "couponChannelId", name = "couponChannelId") + private Long couponChannelId; + @Transient protected List statusS; @@ -161,6 +167,22 @@ public class WxCardCVo extends WxCouponOrder { this.statusStr = statusStr; } + public Integer getSupportTransfer() { + return supportTransfer; + } + + public void setSupportTransfer(Integer supportTransfer) { + this.supportTransfer = supportTransfer; + } + + public Long getCouponChannelId() { + return couponChannelId; + } + + public void setCouponChannelId(Long couponChannelId) { + this.couponChannelId = couponChannelId; + } + public static enum Field { Id_ASC("co.`id` ASC"), Id_DESC("co.`id` DESC"), TenantId_ASC("co.`tenant_id` ASC"), TenantId_DESC("co.`tenant_id` DESC"), diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponCVo.java index bd0e34f6a..3de61a95b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponCVo.java @@ -7,7 +7,6 @@ import javax.persistence.Id; import javax.persistence.Transient; import java.io.Serializable; import java.math.BigDecimal; -import java.text.DecimalFormat; import java.util.Date; import java.util.List; @JsonIgnoreProperties(value = {"handler"}) @@ -35,6 +34,19 @@ public class WxCouponCVo extends WxCoupon implements Serializable { @Transient private String priceStr; + + @Transient + private Integer activityStatus; + + public Integer getActivityStatus() { + return activityStatus; + } + + public void setActivityStatus(Integer activityStatus) { + this.activityStatus = activityStatus; + } + + /*券ID**/ @io.swagger.annotations.ApiModelProperty(value="券ID",name="couponId") private Long couponId; @@ -55,6 +67,12 @@ public class WxCouponCVo extends WxCoupon implements Serializable { @io.swagger.annotations.ApiModelProperty(value="商户列表",name="merchantVoList") private List merchantVoList; + @io.swagger.annotations.ApiModelProperty(value = "是否支持转送(0:不支持,1支持)", name = "supportTransfer") + private Integer supportTransfer; + + @io.swagger.annotations.ApiModelProperty(value = "限制人数", name = "pressLimitNum") + private Integer pressLimitNum; + public Long getCouponId() { return couponId; } @@ -125,4 +143,23 @@ public class WxCouponCVo extends WxCoupon implements Serializable { this.priceStr = priceStr; } + @Override + public Integer getSupportTransfer() { + return supportTransfer; + } + + @Override + public void setSupportTransfer(Integer supportTransfer) { + this.supportTransfer = supportTransfer; + } + + @Override + public Integer getPressLimitNum() { + return pressLimitNum; + } + + @Override + public void setPressLimitNum(Integer pressLimitNum) { + this.pressLimitNum = pressLimitNum; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java index 1efbdecb1..347941a18 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponChannelVo.java @@ -6,6 +6,7 @@ import javax.persistence.Transient; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -15,6 +16,19 @@ import java.util.List; public class WxCouponChannelVo extends WxCouponChannel implements Serializable { private static final long serialVersionUID = 1L; + @Transient + private Integer activityStatus; + + public Integer getActivityStatus() { + return activityStatus; + } + + public void setActivityStatus(Integer activityStatus) { + this.activityStatus = activityStatus; + } + + + /*总库存**/ @io.swagger.annotations.ApiModelProperty(value="总库存",name="inventory") private Integer inventory; @@ -51,6 +65,23 @@ public class WxCouponChannelVo extends WxCouponChannel implements Serializable { @io.swagger.annotations.ApiModelProperty(value="1.主动领取2.定向投放",name="sendType") private Integer sendType; + /**过期退款(0:正常,1不退)**/ + @io.swagger.annotations.ApiModelProperty(value="过期退款(0:正常,1不退)",name="autoRefund") + private Integer autoRefund; + + /**有效时间类型1.时间范围(valid_start_date,valid_end_date). 2领取后几日有效(valid_days)**/ + @io.swagger.annotations.ApiModelProperty(value="有效时间类型1.时间范围(valid_start_date,valid_end_date). 2领取后几日有效(valid_days)",name="validType") + private Integer validType; + /**有效日期-开始**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-开始",name="validStartDate") + private Date validStartDate; + /**有效日期-结束**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-结束",name="validEndDate") + private Date validEndDate; + /**自领取之日几日有效,(停车券当天有效)**/ + @io.swagger.annotations.ApiModelProperty(value="自领取之日几日有效,(停车券当天有效)",name="validDays") + private Integer validDays; + @Transient private String salePriceStr; @@ -67,6 +98,15 @@ public class WxCouponChannelVo extends WxCouponChannel implements Serializable { @Transient private Integer gameWeight; + @io.swagger.annotations.ApiModelProperty(value = "是否可转赠", name = "supportTransfer") + private Integer supportTransfer; + + @io.swagger.annotations.ApiModelProperty(value = "砍价/拼团人数", name = "pressLimitNum") + private Integer pressLimitNum; + + + + public Integer getGameWeight() { return gameWeight; } @@ -195,4 +235,70 @@ public class WxCouponChannelVo extends WxCouponChannel implements Serializable { public void setMerchantVoList(List merchantVoList) { this.merchantVoList = merchantVoList; } + + public Integer getSupportTransfer() { + return supportTransfer; + } + + public void setSupportTransfer(Integer supportTransfer) { + this.supportTransfer = supportTransfer; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public void setTitle(String title) { + this.title = title; + } + + public Integer getPressLimitNum() { + return pressLimitNum; + } + + public void setPressLimitNum(Integer pressLimitNum) { + this.pressLimitNum = pressLimitNum; + } + + public Integer getAutoRefund() { + return autoRefund; + } + + public void setAutoRefund(Integer autoRefund) { + this.autoRefund = autoRefund; + } + + public Integer getValidType() { + return validType; + } + + public void setValidType(Integer validType) { + this.validType = validType; + } + + public Date getValidStartDate() { + return validStartDate; + } + + public void setValidStartDate(Date validStartDate) { + this.validStartDate = validStartDate; + } + + public Date getValidEndDate() { + return validEndDate; + } + + public void setValidEndDate(Date validEndDate) { + this.validEndDate = validEndDate; + } + + public Integer getValidDays() { + return validDays; + } + + public void setValidDays(Integer validDays) { + this.validDays = validDays; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java index 949f2a5c7..98501cca5 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderBVo.java @@ -30,15 +30,6 @@ public class WxCouponOrderBVo extends WxCouponOrder{ /***/ @io.swagger.annotations.ApiModelProperty(value = "", name = "tenantId") private String tenantId; - /*单张券ID**/ - @io.swagger.annotations.ApiModelProperty(value = "单张券ID", name = "couponId") - private Long couponId; - /*c端用户id**/ - @io.swagger.annotations.ApiModelProperty(value = "c端用户id", name = "cUserId") - private Long cUserId; - /*操作券B端小程序用户ID**/ - @io.swagger.annotations.ApiModelProperty(value = "操作券B端小程序用户ID", name = "bUserId") - private Long bUserId; /*用户订单ID**/ @Excel(name="订单号",width = 20) @io.swagger.annotations.ApiModelProperty(value = "用户订单ID", name = "orderId") @@ -150,25 +141,7 @@ public class WxCouponOrderBVo extends WxCouponOrder{ public void setTenantId(String _tenantId) { tenantId = _tenantId; } - public Long getCouponId() { - return couponId; - } - public void setCouponId(Long _couponId) { - couponId = _couponId; - } - public Long getCUserId() { - return cUserId; - } - public void setCUserId(Long _cUserId) { - cUserId = _cUserId; - } - public Long getBUserId() { - return bUserId; - } - public void setBUserId(Long _bUserId) { - bUserId = _bUserId; - } - public Long getOrderId() { + public Long getOrderId() { return orderId; } public void setOrderId(Long _orderId) { diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java index a89922155..fd708fd05 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java @@ -45,6 +45,17 @@ public class WxCouponOrderCVo extends WxCouponOrder { this.ids = ids; } + @Transient + private Integer validStatus; + + public Integer getValidStatus() { + return validStatus; + } + + public void setValidStatus(Integer validStatus) { + this.validStatus = validStatus; + } + /* 基础购买到的券信息 */ /***/ @@ -53,12 +64,6 @@ public class WxCouponOrderCVo extends WxCouponOrder { /*单张券ID**/ @io.swagger.annotations.ApiModelProperty(value = "单张券ID", name = "couponId") private Long couponId; - /*c端用户id**/ - @io.swagger.annotations.ApiModelProperty(value = "c端用户id", name = "cUserId") - private Long cUserId; - /*操作券B端小程序用户ID**/ - @io.swagger.annotations.ApiModelProperty(value = "操作券B端小程序用户ID", name = "bUserId") - private Long bUserId; /*用户订单ID**/ @io.swagger.annotations.ApiModelProperty(value = "用户订单ID", name = "orderId") private Long orderId; @@ -109,7 +114,12 @@ public class WxCouponOrderCVo extends WxCouponOrder { /*购买须知**/ @io.swagger.annotations.ApiModelProperty(value="购买须知",name="remark") private String remark; - + /**有效日期-开始**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-开始",name="validStartDate") + private Date validStartDate; + /**有效日期-结束**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-结束",name="validEndDate") + private Date validEndDate; /*发券商户信息*/ /*使用商户名**/ @@ -144,19 +154,7 @@ public class WxCouponOrderCVo extends WxCouponOrder { public void setCouponId(Long _couponId) { couponId = _couponId; } - public Long getCUserId() { - return cUserId; - } - public void setCUserId(Long _cUserId) { - cUserId = _cUserId; - } - public Long getBUserId() { - return bUserId; - } - public void setBUserId(Long _bUserId) { - bUserId = _bUserId; - } - public Long getOrderId() { + public Long getOrderId() { return orderId; } public void setOrderId(Long _orderId) { @@ -270,4 +268,20 @@ public class WxCouponOrderCVo extends WxCouponOrder { public void setSendChannelType(Integer sendChannelType) { this.sendChannelType = sendChannelType; } + + public Date getValidStartDate() { + return validStartDate; + } + + public void setValidStartDate(Date validStartDate) { + this.validStartDate = validStartDate; + } + + public Date getValidEndDate() { + return validEndDate; + } + + public void setValidEndDate(Date validEndDate) { + this.validEndDate = validEndDate; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java index 07bf6d0d4..b0ef7660a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderCouponVo.java @@ -1,6 +1,8 @@ package com.iformall.domain.vo; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import javax.persistence.Transient; import java.util.Date; import java.util.List; @@ -23,6 +25,18 @@ public class WxOrderCouponVo { this.id = id; } + @Transient + private Integer validStatus; + + public Integer getValidStatus() { + return validStatus; + } + + public void setValidStatus(Integer validStatus) { + this.validStatus = validStatus; + } + + /* 基础购买到的券信息 */ @@ -62,6 +76,12 @@ public class WxOrderCouponVo { @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; + /**有效日期-开始**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-开始",name="validStartDate") + private Date validStartDate; + /**有效日期-结束**/ + @io.swagger.annotations.ApiModelProperty(value="有效日期-结束",name="validEndDate") + private Date validEndDate; /*券ID-产品ID将来的产品都会放在coupon表里**/ @io.swagger.annotations.ApiModelProperty(value="券包中券ID",name="couponOrderId") @@ -111,6 +131,10 @@ public class WxOrderCouponVo { @io.swagger.annotations.ApiModelProperty(value="卡券来源",name="sendChannelType") private Integer sendChannelType; + @io.swagger.annotations.ApiModelProperty(value = "是否可转赠", name = "supportTransfer") + private Integer supportTransfer; + + public Long getOrderNumber() { return orderNumber; } @@ -272,4 +296,36 @@ public class WxOrderCouponVo { public void setSendChannelType(Integer sendChannelType) { this.sendChannelType = sendChannelType; } + + public Long getcUserId() { + return cUserId; + } + + public void setcUserId(Long cUserId) { + this.cUserId = cUserId; + } + + public Integer getSupportTransfer() { + return supportTransfer; + } + + public void setSupportTransfer(Integer supportTransfer) { + this.supportTransfer = supportTransfer; + } + + public Date getValidStartDate() { + return validStartDate; + } + + public void setValidStartDate(Date validStartDate) { + this.validStartDate = validStartDate; + } + + public Date getValidEndDate() { + return validEndDate; + } + + public void setValidEndDate(Date validEndDate) { + this.validEndDate = validEndDate; + } } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderGroupMarketing.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderGroupMarketing.java new file mode 100644 index 000000000..bc234bfd8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxOrderGroupMarketing.java @@ -0,0 +1,25 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxOrderGroupMarketing implements Serializable { + private static final long serialVersionUID = 1L; + + private String tenantId; + private String couponId; + private String coverImg; + private String title; + private String price; + private String salePrice; + private String groupTotalCount; + private String groupSuccessCount; + private String groupTransferRatio; + private String successPeople; + private String verifyCount; + private String verifyRatio; + private String totalPeople; + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxPayOrderVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxPayOrderVo.java new file mode 100644 index 000000000..8ed58c582 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxPayOrderVo.java @@ -0,0 +1,39 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxPayOrder; + +public class WxPayOrderVo extends WxPayOrder { + + @io.swagger.annotations.ApiModelProperty(value="用户绑定的openId",name="openId") + private String openId; + + @io.swagger.annotations.ApiModelProperty(value="用户支付appId",name="appId") + private String appId; + + @io.swagger.annotations.ApiModelProperty(value="支付ID,参看wx_pay_account",name="payId") + private Long payId; + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public Long getPayId() { + return payId; + } + + public void setPayId(Long payId) { + this.payId = payId; + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappAuditStatusVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappAuditStatusVo.java new file mode 100644 index 000000000..ed9cad7dc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappAuditStatusVo.java @@ -0,0 +1,14 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxWeappAuditStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxWeappAuditStatusVo extends WxWeappAuditStatus { + + /**小程序名称*/ + @io.swagger.annotations.ApiModelProperty(value="小程序名称",name="name") + private String name; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappCodeStatusVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappCodeStatusVo.java new file mode 100644 index 000000000..c91d1df16 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappCodeStatusVo.java @@ -0,0 +1,14 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxWeappCodeStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxWeappCodeStatusVo extends WxWeappCodeStatus { + + /**小程序名称*/ + @io.swagger.annotations.ApiModelProperty(value="小程序名称",name="name") + private String name; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java new file mode 100644 index 000000000..9838377f0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappInfo.java @@ -0,0 +1,99 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxAuthorizerInfo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxWeappInfo extends WxAuthorizerInfo { + + /**小程序类型(1-B端 2-C端)*/ + @io.swagger.annotations.ApiModelProperty(value="小程序类型(1-B端 2-C端)",name="type") + private Integer type; + /**小程序名称*/ + @io.swagger.annotations.ApiModelProperty(value="小程序名称",name="name") + private String name; + + public static enum Field + { + Id_ASC("ai.`id` ASC"),Id_DESC("ai.`id` DESC") + ,AuthorizerAppid_ASC("ai.`authorizer_appid` ASC"),AuthorizerAppid_DESC("ai.`authorizer_appid` DESC") + + ,HeadImg_ASC("ai.`head_img` ASC"),HeadImg_DESC("ai.`head_img` DESC") + ,Alias_ASC("ai.`alias` ASC"),Alias_DESC("ai.`alias` DESC") + ,QrcodeUrl_ASC("ai.`qrcode_url` ASC"),QrcodeUrl_DESC("ai.`qrcode_url` DESC") + ,CreateTime_ASC("ai.`create_time` ASC"),CreateTime_DESC("ai.`create_time` DESC") + ,UpdateTime_ASC("ai.`update_time` ASC"),UpdateTime_DESC("ai.`update_time` DESC") + ,AuthorizationStatus_ASC("ai.`authorization_status` ASC"),AuthorizationStatus_DESC("ai.`authorization_status` DESC") + ,AuthTime_ASC("ai.`auth_time` ASC"),AuthTime_DESC("ai.`auth_time` DESC") + ,BaseStatus_ASC("ai.`base_status` ASC"),BaseStatus_DESC("ai.`base_status` DESC") + ,BaseTime_ASC("ai.`base_time` ASC"),BaseTime_DESC("ai.`base_time` DESC") + ,DomainStatus_ASC("ai.`domain_status` ASC"),DomainStatus_DESC("ai.`domain_status` DESC") + ,DomainTime_ASC("ai.`domain_time` ASC"),DomainTime_DESC("ai.`domain_time` DESC") + ,WebDomainStatus_ASC("ai.`webdomain_status` ASC"),WebDomainStatus_DESC("ai.`webdomain_status` DESC") + ,WebDomainTime_ASC("ai.`webdomain_time` ASC"),WebDomainTime_DESC("ai.`webdomain_time` DESC") + ,TemplateStatus_ASC("ai.`template_status` ASC"),TemplateStatus_DESC("ai.`template_status` DESC") + ,TemplateTime_ASC("ai.`template_time` ASC"),TemplateTime_DESC("ai.`template_time` DESC") + ,CurrentVersion_ASC("ai.`current_version` ASC"),CurrentVersion_DESC("ai.`current_version` DESC") + ,CurrentDesc_ASC("ai.`current_desc` ASC"),CurrentDesc_DESC("ai.`current_desc` DESC") + ,ReleaseTime_ASC("ai.`release_time` ASC"),ReleaseTime_DESC("ai.`release_time` DESC") + ,OpenAppid_ASC("ai.`open_appid` ASC"),OpenAppid_DESC("ai.`open_appid` DESC") + ,BindOpenTime_ASC("ai.`bind_open_time` ASC"),BindOpenTime_DESC("ai.`bind_open_time` DESC") + ,Name_ASC("a.`name` ASC"),Name_DESC("a.`name` DESC") + ,Type_ASC("a.`type` ASC"),Type_DESC("a.`type` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxWeappInfo.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + List fList = new ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappReleaseStatusVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappReleaseStatusVo.java new file mode 100644 index 000000000..6601de595 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxWeappReleaseStatusVo.java @@ -0,0 +1,14 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.WxWeappReleaseStatus; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class WxWeappReleaseStatusVo extends WxWeappReleaseStatus { + + /**小程序名称*/ + @io.swagger.annotations.ApiModelProperty(value="小程序名称",name="name") + private String name; +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumAppType.java b/mallinkService/src/main/java/com/iformall/enums/EnumAppType.java index 7ddfe2a63..7a3deafc3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumAppType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumAppType.java @@ -5,10 +5,12 @@ package com.iformall.enums; */ public enum EnumAppType { - // 1-B端, 2-C端 + // 1-B端, 2-C端, 3-服务号, 4-订阅号 B(1, "B端"), - C(2, "C端") + C(2, "C端"), + MP_S(3,"公众号-服务号"), + MP_P(4, "公众号-订阅号"), ; public static EnumAppType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyStatus.java index c71700ab8..c83a52f78 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillDailyStatus.java @@ -11,6 +11,7 @@ public enum EnumBillDailyStatus { WAIT_PAY(2,"待缴"), PAID(3, "已结清"), NOT_EXPIRED(4,"未到期"), + RETURN(5, "退还"), ; public static EnumBillDailyStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillRentStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillRentStatus.java index 422364c8b..a9c36a0ff 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillRentStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillRentStatus.java @@ -11,6 +11,7 @@ public enum EnumBillRentStatus { PAID(3, "已结清"), NOT_EXPIRED(4,"未到期"), RETURN(5, "已退还"), + INVALID(6, "失效"), ; public static EnumBillRentStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java b/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java index cb3b5ccda..1cd2df063 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumBillTypeParam.java @@ -13,7 +13,8 @@ public enum EnumBillTypeParam { PROPERTY_DEPOSIT(4,"物业押金"), WATER(5, "水费"), POWER(6, "电费"), - ROUTINE(7,"其他") + ROUTINE(7, "其他费用"), + ATHER_DEPOSIT(8, "其他押金") ; public static EnumBillTypeParam getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java index 508e059f3..562b3772c 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarCmd.java @@ -9,8 +9,8 @@ public enum EnumCarCmd { CAR_ETCP_CALLBACK_PARK_IN(601, "ETCP入场通知"), CAR_ETCP_CALLBACK_PARK_OUT(602, "ETCP出场通知"), CAR_ETCP_CALLBACK_UNBIND(603, "ETCP车辆解绑通知"), - CAR_ETCP_CALLBACK_PAY_MANUAL(604, "支付结果通知"), - CAR_ETCP_CALLBACK_UNPAY(605, "停车费获取"), + CAR_ETCP_CALLBACK_PAY_MANUAL(604, "ETCP支付结果通知"), + CAR_ETCP_CALLBACK_UNPAY(605, "ETCP停车费获取"), CAR_TJD_CALLBACK_PARK_IN(610, "停简单入场通知"), CAR_TJD_CALLBACK_PARK_OUT(611, "停简单出场通知"), ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumChart.java b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java new file mode 100644 index 000000000..ac74c6d6d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java @@ -0,0 +1,82 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumChart { + + CZL(1, "出租率"), + ZJSJL(2, "租金收缴率"), + ZRBDL(3, "昨日报单率"), + CLSJ(4, "车流数据"), + QJYSJ(5, "券交易数据"), + HYYHSJ(6, "活跃用户数据"), + XSSJ(7, "销售数据"), + JDSJ(8, "解单数据"), + JRCNCLL(9, "今日场内车流量"), + JRYBCPL(10, "今日已绑车牌量"), + SSCLL(11, "实时车流量"), + LSCLL(12, "历史车流量"), + JYZXXZTCHY(13, "近一周新增停车会员"), + JYZXSJFCL(14, "近一周线上缴费车辆"), + JYZXSJFJE(15, "近一周线上缴费金额"), + JYZXZHYS(16, "近一周新增会员数"), + ZRCDYH(17, "昨日触达用户"), + JRQJYSJ(18, "今日券交易数据"), + JRCJYX(19, "今日场景营销"), + CDYHS(20, "触达用户数"), + CJYXSJ(21, "场景营销数据"), + XZYH(22, "新增用户"), + HYYH(23, "活跃用户"), + XSJY(24, "线上交易"), + JYZXZYHS(25, "近一周新增用户数"), + JYZHYYHS(26, "近一周活跃用户数"), + JYZXSJYJE(27, "近一周线上交易金额"), + XZYHQS(28, "新增用户趋势"), + HYYHQS(29, "活跃用户趋势"), + XSJYQS(30, "线上交易趋势"), + WXYHZS(31, "微信用户总数"), + HYZS(32, "会员总数"), + WXYHLJQS(33, "微信用户累计趋势"), + HYLJQS(34, "会员累计趋势"), + WXYHXZQS(35, "微信用户新增趋势"), + HYXZQS(36, "会员新增趋势"), + TKQD(37, "拓客渠道"), + CJPM(38, "场景排名"), + HYXBBL(39, "会员性别比例"), + HYBDCPL(40, "会员绑定车牌率"), + HYNLCC(41, "会员年龄层次"), + HYCZZ(42, "会员成长值"), + HYSJPP(43, "会员手机品牌"), + HYHYD(44, "会员活跃度"), + + SALE_CARD(45, "卡营销数据"), + SALE_COUPON(46, "卷营销数据"), + SALE_PRESS(47, "砍价营销数据"), + SALE_GROUP(48, "拼团营销数据"),; + + public static EnumChart getEnum(Integer code) { + for (EnumChart value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumChart(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumChartType.java b/mallinkService/src/main/java/com/iformall/enums/EnumChartType.java new file mode 100644 index 000000000..d7c20cf01 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumChartType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumChartType { + CAR_OUT(1, "出场车辆"), + CAR_PAID(2, "缴费车辆"), + CAR_PAY_FEE(3, "缴费金额"), + CAR_MEMBER(4, "新增会员"), + CAR_NEW_MEMBER(5, "新增停车会员"), + CAR_BIND(6, "已绑车辆"), + SALE_COUPON_PRICE(8, "销售总交易额"), + MERCHANT_TRADE(9, "解单金额"),; + public static EnumChartType getEnum(Integer code) { + for (EnumChartType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumChartType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponAutoRefund.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponAutoRefund.java new file mode 100644 index 000000000..51542555e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponAutoRefund.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponAutoRefund { + + // 0-可投放;1-已作废; + NORMAL(0, "正常"), + UNSUPPORTED(1, "不退"), + ; + + public static EnumCouponAutoRefund getEnum(Integer code) { + for (EnumCouponAutoRefund value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponAutoRefund(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelActivityStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelActivityStatus.java new file mode 100644 index 000000000..8d8c00e2d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelActivityStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponChannelActivityStatus { + + + PREPARED(0, "预告中"), + STARTED(1, "已开启"), + ENDED(2, "已结束"), + ; + + public static EnumCouponChannelActivityStatus getEnum(Integer code) { + for (EnumCouponChannelActivityStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponChannelActivityStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java index 913b52089..4fe09053d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponChannelType.java @@ -10,7 +10,8 @@ public enum EnumCouponChannelType { COUPON_CHANNEL_ID_CAMPAIN(3, "幻灯片"), // banner图, 宣传页,轮播图,走马灯 COUPON_CHANNEL_ID_GAME(4, "游戏"), COUPON_CHANNEL_ID_CARD(5, "卡频道"), - COUPON_CHANNEL_ID_PRESS(6, "砍价频道") + COUPON_CHANNEL_ID_PRESS(6, "砍价频道"), + COUPON_CHANNEL_ID_ORDER_GROUP(7, "拼团频道") ; public static EnumCouponChannelType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java index 8801128f1..e6abcd534 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java @@ -10,10 +10,12 @@ public enum EnumCouponOrderStatus { COUPON_ORDER_USED(1, "已核销"), COUPON_ORDER_OVER_TIME(2, "已过期"), COUPON_ORDER_INVALID(3, "已作废"), + CARD_USING(4, "使用中"), CARD_OVER_TIME(5, "已过期"), CARD_COMPLETE(6, "已用完"), - CARD_RETURNED(7, "已线下退款") + CARD_RETURNED(7, "已线下退款"), + CARD_TRANSFER(8, "已转赠") ; public static EnumCouponOrderStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderValidStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderValidStatus.java new file mode 100644 index 000000000..23e2eea98 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderValidStatus.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponOrderValidStatus { + + PREPARED(0, "未到使用期"), + STARTED(1, "可使用"), + ENDED(1, "已过使用期"), + ; + + public static EnumCouponOrderValidStatus getEnum(Integer code) { + for (EnumCouponOrderValidStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponOrderValidStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponTransfer.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponTransfer.java new file mode 100644 index 000000000..188d3a7db --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponTransfer.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCouponTransfer { + + NO(0, "否"), + YES(1, "是"),; + + public static EnumCouponTransfer getEnum(Integer code) { + for (EnumCouponTransfer value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCouponTransfer(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java index 8a76dbc34..6e6fb08ba 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponType.java @@ -14,7 +14,7 @@ public enum EnumCouponType { COUPON_TINGCHE(5, "停车券"), COUPON_MULTIMCH(6, "通用券"), COUPON_PRESS(8, "砍价券"), - // COUPON_GROUP(9, "团购券"), + COUPON_GROUP(9, "团购券"), CARD_MULTIMCH(100, "消费卡"), ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumDeviceHbCmd.java b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceHbCmd.java new file mode 100644 index 000000000..de1e2efeb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceHbCmd.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumDeviceHbCmd { + + CMD_NULL(0, "无"), + CMD_POWER_OFF(1, "关机"); + public static EnumDeviceHbCmd getEnum(Integer code) { + for (EnumDeviceHbCmd value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumDeviceHbCmd(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumDeviceOnlineStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceOnlineStatus.java new file mode 100644 index 000000000..753d6e4f6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceOnlineStatus.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumDeviceOnlineStatus { + + OFFLINE(0, "离线"), + ONLINE(1, "在线"); + public static EnumDeviceOnlineStatus getEnum(Integer code) { + for (EnumDeviceOnlineStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumDeviceOnlineStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumDeviceStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceStatus.java new file mode 100644 index 000000000..af6b6b544 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceStatus.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumDeviceStatus { + + VALID(0, "有效"), + INVALID(1, "无效"); + public static EnumDeviceStatus getEnum(Integer code) { + for (EnumDeviceStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumDeviceStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumDeviceType.java b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceType.java new file mode 100644 index 000000000..e9a5b52c6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumDeviceType.java @@ -0,0 +1,33 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumDeviceType { + + SCREEN(0, "广告屏"); + public static EnumDeviceType getEnum(Integer code) { + for (EnumDeviceType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumDeviceType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumEndProperty.java b/mallinkService/src/main/java/com/iformall/enums/EnumEndProperty.java new file mode 100644 index 000000000..a2005daf7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumEndProperty.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by luozukai + * 终止合同类型 + */ +public enum EnumEndProperty { + + END_RENT(1, "终止租赁合同"), + END_RENT_AND_PROPERTY(2, "终止租赁和物业合同"), + ; + + public static EnumEndProperty getEnum(Integer code) { + for (EnumEndProperty value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumEndProperty(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java index bd4f6ce47..ea0ffe236 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumFlowKey.java @@ -6,8 +6,9 @@ package com.iformall.enums; */ public enum EnumFlowKey { - CONTRACT("contract_flow", "合同审批流程key"), - BILL("bill_flow", "账单审批流程key") + CONTRACT("contract_flow", "合同审批流程"), + BILL("bill_flow", "账单审批流程"), + END_CONTRACT("end_contract_flow", "终止合同审批流程"), ; public static EnumFlowKey getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumFlowRecordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumFlowRecordStatus.java index 9a4e2addd..653edda10 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumFlowRecordStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumFlowRecordStatus.java @@ -5,12 +5,14 @@ package com.iformall.enums; */ public enum EnumFlowRecordStatus { - // 1发起申请2审批通过3审批驳回 NEW(1, "发起申请"), APPLY(2, "审批通过"), REJECT(3, "审批驳回"), ASSIGNEE(4, "待审批"), - CANCLE(5, "合同作废") + CANCLE(5, "合同作废"), + SETBACK(6, "撤回"), + //ADVANCE_END(6, "提前终止"), + //ADVANCE_END(7, "审批完成"), ; public static EnumFlowRecordStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumIsPreview.java b/mallinkService/src/main/java/com/iformall/enums/EnumIsPreview.java new file mode 100644 index 000000000..0be8e82eb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumIsPreview.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by luozukai + * 预览账单0否1是 + */ +public enum EnumIsPreview { + + NO(0, "否"), + YES(1, "是") + ; + + public static EnumIsPreview getEnum(Integer code) { + for (EnumIsPreview value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumIsPreview(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumLoginType.java b/mallinkService/src/main/java/com/iformall/enums/EnumLoginType.java new file mode 100644 index 000000000..d25d5f607 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumLoginType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/11/16. + */ +public enum EnumLoginType { + + // 0-password, 1-nopassword + + PASSWORD(0, "PASSWORD"), + NOPASSWD(1, "NOPASSWORD") + ; + + public static EnumLoginType getEnum(Integer code) { + for (EnumLoginType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumLoginType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMenuType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMenuType.java new file mode 100644 index 000000000..ef2973bc3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMenuType.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumMenuType { + MOBILE_ADMIN(8, "移动端数据塔台") + ; + + public static EnumMenuType getEnum(Integer code) { + for (EnumMenuType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMenuType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java index 4c955d020..27dadc8b4 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -11,7 +11,7 @@ public enum EnumMsgModel { FLOW_APPLY_NODIFY(3, "审批通知"), FLOW_PASS_NODIFY(4, "通过审批通知"), FLOW_REJECT_NODIFY(5, "驳回通知"), - VALIDATION_CODE(6, "B端验证码"), + VALIDATION_CODE(6, "验证码"), BILL_WAIT_PAY(7, "账单待缴通知"), BILL_OWE(8, "账单欠缴通知") ; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqKey.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqKey.java new file mode 100644 index 000000000..9a403249b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqKey.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by luozukai + */ +public enum EnumMsgMqKey { + DEFAULT("key-1", "默认"), + ; + + public static EnumMsgMqKey getEnum(String code) { + for (EnumMsgMqKey value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private String code; + private String message; + + EnumMsgMqKey(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTag.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTag.java new file mode 100644 index 000000000..edd6b4af7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTag.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by luozukai + */ +public enum EnumMsgMqTag { + DEFAULT("tag-1", "默认"), + ; + + public static EnumMsgMqTag getEnum(String code) { + for (EnumMsgMqTag value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private String code; + private String message; + + EnumMsgMqTag(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTopic.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTopic.java new file mode 100644 index 000000000..30525cfdd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgMqTopic.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by luozukai + */ +public enum EnumMsgMqTopic { + DEFAULT("topic-1", "默认"), + ; + + public static EnumMsgMqTopic getEnum(String code) { + for (EnumMsgMqTopic value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private String code; + private String message; + + EnumMsgMqTopic(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordStatus.java new file mode 100644 index 000000000..82fbab4df --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by luozukai + */ +public enum EnumMsgRecordStatus { + DEFAULT(0, "默认"), + SEND_SUCC(1, "发送成功"), + CONSUME_SUCC(2, "消费成功"), + CONSUME_FAIL(3, "消费失败"), + + ; + + public static EnumMsgRecordStatus getEnum(Integer code) { + for (EnumMsgRecordStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMsgRecordStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java new file mode 100644 index 000000000..d212db91d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by luozukai + */ +public enum EnumMsgRecordType { + SMS(1, "短信"), + SMS_CALLBACK(2, "业务短信"), + EMAIL(3, "邮件"), + SMART_APP(4, "小程序"), + PUBLIC(5, "公众号"), + SYSTEM(6, "系统通知"), + ; + + public static EnumMsgRecordType getEnum(Integer code) { + for (EnumMsgRecordType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumMsgRecordType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderGroupStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderGroupStatus.java new file mode 100644 index 000000000..2b72476de --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderGroupStatus.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumOrderGroupStatus { + + COUPON_ORDER_USED(1, "拼团中"), + COUPON_ORDER_OVER_TIME(2, "拼团成功"), + COUPON_ORDER_INVALID(3, "拼团超时"), + CARD_USING(4, "拼团失败"),; + + public static EnumOrderGroupStatus getEnum(Integer code) { + for (EnumOrderGroupStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOrderGroupStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java index b7125c7bb..cf74d9613 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java @@ -16,7 +16,12 @@ public enum EnumOrderStatus { ORDER_STATUS_PRESSING(6, "砍价中"), ORDER_STATUS_PRESS_COMPLETE(7, "砍价完成"), ORDER_STATUS_PRESS_OVERTIME(8, "砍价已过期"), - ORDER_STATUS_PRESS_CANCEL(9, "砍价已取消") + ORDER_STATUS_PRESS_CANCEL(9, "砍价已取消"), + ORDER_STATUS_COOPERATING(10, "拼团中"), + ORDER_STATUS_COOPERATING_COMPLETE(11, "拼团完成"), + ORDER_STATUS_COOPERATING_OVERTIME(12, "拼团已过期"), + ORDER_STATUS_COOPERATING_CANCEL(13, "拼团失败"), + ORDER_STATUS_COOPERATING_FAILD(14, "参团失败") ; public static EnumOrderStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java new file mode 100644 index 000000000..c81002007 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayFrom.java @@ -0,0 +1,35 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumPayFrom { + + CALLBACK(0, "callback"), + QUERY(1, "查询"); + + public static EnumPayFrom getEnum(Integer code) { + for (EnumPayFrom value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPayFrom(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPointType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPointType.java new file mode 100644 index 000000000..40cea2391 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPointType.java @@ -0,0 +1,43 @@ +package com.iformall.enums; + + +/** + * @author luozukai + * 点位类型1固定点位2临时促销点位3宣传点位4ATM点位5仓库点位6其他点位 + */ + +public enum EnumPointType { + + POINT1(1, "固定点位"), + POINT2(2, "临时促销点位"), + POINT3(3, "宣传点位"), + POINT4(4, "ATM点位"), + POINT5(5, "仓库点位"), + OTHER(6, "其他点位"), + ; + + public static EnumPointType getEnum(Integer code) { + for (EnumPointType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumPointType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingOrderStatus.java index f78e5129a..be59246a2 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumProfitSharingOrderStatus.java @@ -4,7 +4,7 @@ package com.iformall.enums; * Created by Stormeye on 2018/08/09. */ public enum EnumProfitSharingOrderStatus { - PROFIT_SHARING_UNKNOWN(-1, "未知"), + PROFIT_SHARING_UNKNOWN(0, "未知"), PROFIT_SHARING_REQ_FAILED(1, "提交订单失败"), PROFIT_SHARING_APPLY_FAILED(2, "提交业务失败"), PROFIT_SHARING_ACCEPTED(3, "受理成功"), diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAppStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAppStatus.java index 6e642eeda..eefb9786d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAppStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentContractAppStatus.java @@ -9,7 +9,8 @@ public enum EnumRentContractAppStatus { APPLYING(1, "审核中"), FINISH(2, "审核完成"), REJECT(3, "驳回"), - CANCLE(4,"合同作废") + CANCLE(4,"合同作废"), + SETBACK(5,"撤回") ; public static EnumRentContractAppStatus getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumRentShopType.java b/mallinkService/src/main/java/com/iformall/enums/EnumRentShopType.java index c53f53215..19ef9a8d1 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumRentShopType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumRentShopType.java @@ -8,7 +8,7 @@ package com.iformall.enums; public enum EnumRentShopType { SHOP(1, "店铺"), - POINT(2, "点位"),; + POINT(2, "多经点位"); public static EnumRentShopType getEnum(Integer code) { for (EnumRentShopType value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdStatus.java new file mode 100644 index 000000000..33ae64701 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdStatus.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumScreenAdStatus { + + VALID(0, "有效"), + INVALID(1, "无效"); + public static EnumScreenAdStatus getEnum(Integer code) { + for (EnumScreenAdStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumScreenAdStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdType.java b/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdType.java new file mode 100644 index 000000000..748e85064 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumScreenAdType.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumScreenAdType { + + COUPON(0, "券"), + CAMPAIGN(1, "宣传页"); + public static EnumScreenAdType getEnum(Integer code) { + for (EnumScreenAdType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumScreenAdType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java index 753cf6ac0..e0a960f11 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java @@ -8,7 +8,8 @@ public enum EnumTemplateType { // 1-核销成功消息, 2-核销失败消息 VERIFY_SUCCESS(1, "核销成功消息"), - VERIFY_FAIL(2, "核销失败消息") + VERIFY_FAIL(2, "核销失败消息"), + AUDIT_MESSAGE(3, "审核结果通知") ; public static EnumTemplateType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumUserWechat.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserWechat.java new file mode 100644 index 000000000..f2f4c2d48 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserWechat.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumUserWechat { + + // 微信第三方web登录 0-已绑定,1-未绑定 + + HAD(0, "已绑定"), + NO(1, "未绑定") + ; + + public static EnumUserWechat getEnum(Integer code) { + for (EnumUserWechat value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumUserWechat(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWeappAuditStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumWeappAuditStatus.java new file mode 100644 index 000000000..e8014da75 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWeappAuditStatus.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumWeappAuditStatus { + + // 0为审核成功,1为审核失败,2为审核中,3已撤回 + SUCCESS(0, "审核成功"), + FAIL(1, "审核失败"), + AUDITING(2, "审核中"), + UNDO(3, "已撤回"), + ; + + public static EnumWeappAuditStatus getEnum(Integer code) { + for (EnumWeappAuditStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWeappAuditStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWeappCodeCommitStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumWeappCodeCommitStatus.java new file mode 100644 index 000000000..f0514af75 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWeappCodeCommitStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumWeappCodeCommitStatus { + + // 0: 提交成功, 1: 提交失败, ; + + SUCCESS(0, "提交成功"), + FAIL(1, "提交失败") + ; + + public static EnumWeappCodeCommitStatus getEnum(Integer code) { + for (EnumWeappCodeCommitStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWeappCodeCommitStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWeappReleaseStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumWeappReleaseStatus.java new file mode 100644 index 000000000..d999cd06b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWeappReleaseStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumWeappReleaseStatus { + + // 0为发布成功,1为发布失败 + SUCCESS(0, "发布成功"), + FAIL(1, "发布失败"), + BACK(2, "发布回退"), + ; + + public static EnumWeappReleaseStatus getEnum(Integer code) { + for (EnumWeappReleaseStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWeappReleaseStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationInfoType.java b/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationInfoType.java new file mode 100644 index 000000000..a622eb7de --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationInfoType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumWxAuthorizationInfoType { + + COMPONENT_VERIFY_TICKET(1, "component_verify_ticket"), + UNAUTHORIZED(2, "unauthorized"), + AUTHORIZED(3, "authorized"), + UPDATEAUTHORIZED(4, "updateauthorized") + ; + + public static EnumWxAuthorizationInfoType getEnum(Integer code) { + for (EnumWxAuthorizationInfoType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWxAuthorizationInfoType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationStatus.java new file mode 100644 index 000000000..a26c35c95 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumWxAuthorizationStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumWxAuthorizationStatus { + + // 0-authorized, 1-unauthorized + + AUTHORIZED(0, "authorized"), + UNAUTHORIZED(1, "unauthorized") + ; + + public static EnumWxAuthorizationStatus getEnum(Integer code) { + for (EnumWxAuthorizationStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumWxAuthorizationStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java index c806713dc..f40d727c4 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.vo.MallUserInfoVo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -9,16 +10,29 @@ import java.util.Map; public interface MallUserInfoMapper extends CommonMapper { + MallUserInfo selectById(@Param("id") Long id); + List findList(MallUserInfo mallUserInfo); MallUserInfo selectByUserName(@Param("username") String username); - MallUserInfo selectByOpenId(@Param("openId") String openId); + MallUserInfo selectByUserNameWebOpen(@Param("username") String username, @Param("webOpenId") String webOpenId); + + MallUserInfo selectByBOpenId(@Param("bopenId") String bopenId, @Param("tenantId") String tenantId); + + List selectByWebOpenId(@Param("webOpenId") String webOpenId); + + void removeWebOpenId(MallUserInfo mallUserInfo); - MallUserInfo selectByPhone(@Param("phone") String phone); + MallUserInfo selectByPhone(@Param("phone") String phone, @Param("tenantId") String tenantId); Integer hasButtonPermission(@Param("userId") Long userId, @Param("permission") String permission); long cntByUserName(Map params); + + List selectUsersByPhone(@Param("phone") String phone); + + List selectUsersByWebOpenId(@Param("webOpenId") String webOpenId); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java new file mode 100644 index 000000000..ddd61732d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAuthorizerInfoMapper.java @@ -0,0 +1,21 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.vo.WxWeappInfo; + +public interface WxAuthorizerInfoMapper extends CommonMapper { + + List findList(WxAuthorizerInfo wxAuthorizerInfo); + + List findVoList(WxWeappInfo wxWeappInfo); + + void updateReleaseInfo(WxAuthorizerInfo wxAuthorizerInfo); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java index 53a706a99..a9280dbf0 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillDepositMapper.java @@ -3,7 +3,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxBillDeposit; - +import com.iformall.domain.po.WxRentContract; import java.util.List; import java.util.Map; @@ -22,7 +22,7 @@ public interface WxBillDepositMapper extends CommonMapper { void updateWaitPayStatus(Map params); - + long queryOweCount(WxRentContract wxRentContract); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyDepositMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyDepositMapper.java index 6caf665e1..37442397e 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyDepositMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyDepositMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxBillPropertyDeposit; +import com.iformall.domain.po.WxPropertyContract; import java.util.List; import java.util.Map; @@ -21,7 +22,7 @@ public interface WxBillPropertyDepositMapper extends CommonMapper params); - + long queryOweCount(WxPropertyContract wxPropertyContract); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java index 93b376d0f..9537e66c9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillPropertyMapper.java @@ -2,6 +2,9 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxBillRent; +import com.iformall.domain.po.WxPropertyContract; +import com.iformall.domain.po.WxRentContract; import java.util.List; import java.util.Map; @@ -21,7 +24,13 @@ public interface WxBillPropertyMapper extends CommonMapper void updateWaitPayStatus(Map params); - - - + void updateInvalidStatus(WxBillProperty wxBillProperty); + + void updateInvalidStatusByRent(WxRentContract wxRentContract); + + void deletePreviewBill(WxPropertyContract wxPropertyContract); + + void update(WxBillProperty wxBillProperty); + + void updatePreviewStatus(WxBillProperty record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java index 16a2da283..205a9ed62 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBillRentMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxBillRent; +import com.iformall.domain.po.WxRentContract; import java.util.List; import java.util.Map; @@ -21,4 +22,11 @@ public interface WxBillRentMapper extends CommonMapper { void updateWaitPayStatus(Map params); + void updateInvalidStatus(WxBillRent wxBillRent); + + void deletePreviewBill(WxRentContract wxRentContract); + + void update(WxBillRent record); + + void updatePreviewStatus(WxBillRent record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCarCmdLogMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCarCmdLogMapper.java index a25b72fb7..4ebc69474 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCarCmdLogMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCarCmdLogMapper.java @@ -14,9 +14,9 @@ public interface WxCarCmdLogMapper extends CommonMapper { List findList(WxCarCmdLog wxCarCmdLog); - List> queryHistory(HashMap params); + List> queryHistory(HashMap params); - List> queryTodayCar(HashMap params); + List> queryTodayCar(HashMap params); List> queryWeekCarPay(HashMap params); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java index 9f5b6d5b1..bf4c0fee3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java @@ -7,8 +7,6 @@ import com.iformall.domain.vo.WxCardVo; public interface WxCardInfoMapper extends CommonMapper { - List findList(WxCardInfo wxCardInfo); - List findVoList(WxCardVo wxCardVo); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java new file mode 100644 index 000000000..90a0624ed --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java @@ -0,0 +1,9 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxCardTransferInfo; + +public interface WxCardTransferInfoMapper extends CommonMapper { + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java new file mode 100644 index 000000000..780d8a43b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java @@ -0,0 +1,7 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxChartDataEntity; + +public interface WxChartDataMapper extends CommonMapper { +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java new file mode 100644 index 000000000..72d6514de --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxComponentVerifyTicketMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxComponentVerifyTicket; + +public interface WxComponentVerifyTicketMapper extends CommonMapper { + + List findList(WxComponentVerifyTicket wxComponentVerifyTicket); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java index 26d47c922..878ddcff9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java @@ -13,6 +13,8 @@ public interface WxCouponChannelMapper extends CommonMapper findVoList(WxCouponChannel wxCouponChannel); WxCouponCVo findVoDetail(@Param("id")Long id); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 58688b440..7f6cf6a25 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -2,13 +2,14 @@ package com.iformall.mapper; import java.util.*; import com.iformall.common.CommonMapper; -import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.vo.WxCouponCVo; import org.apache.ibatis.annotations.Param; import com.iformall.domain.po.WxCoupon; public interface WxCouponMapper extends CommonMapper { - + List findPressData(WxCoupon wxCoupon); + List findCouponData(WxCoupon wxCoupon); + List findCountData(WxCoupon wxCoupon); List findList(WxCoupon wxCoupon); List findCardList(WxCoupon wxCoupon); List findCouponList(WxCoupon wxCoupon); @@ -21,4 +22,49 @@ public interface WxCouponMapper extends CommonMapper { void offExpiriedCouponByValidDate(); void offExpiriedCouponByMerchantStatus(); + + /** + * 查询时间段内销售金额 + * @param wxCoupon + * @return + */ + List findSaleMoneyByDate(WxCoupon wxCoupon); + + /** + * 查询时间段内核销金额 + * @param wxCoupon + * @return + */ + List findPaymentByDate(WxCoupon wxCoupon); + + Long findSaleCardCount(WxCoupon wxCoupon); + + Long findTranCardCount(WxCoupon wxCoupon); + + Long findSubsidyMoney(WxCoupon wxCoupon); + + //-------卷-------- + List findCouponSendCount(WxCoupon wxCoupon); + + List findCouponOrderCount(WxCoupon wxCoupon); + + List findCouponGetCount(WxCoupon wxCoupon); + + List findCouponPaymentCount(WxCoupon wxCoupon); + + List priceCouponSaleCount(WxCoupon wxCoupon); + + List priceCouponPaymentCount(WxCoupon wxCoupon); + + Long findSumPriceSaleMoney(WxCoupon wxCoupon); + Long findSumPricePayMent(WxCoupon wxCoupon); + Long findSumSubsidyMoney(WxCoupon wxCoupon); + + //-------砍价-------- + List pressSendHistory(WxCoupon wxCoupon); + List pressSuccHistory(WxCoupon wxCoupon); + List pressPaymentHistory(WxCoupon wxCoupon); + String pressSuccRate(WxCoupon wxCoupon); +// Long sumSubsidy(WxCoupon wxCoupon); + Long sumJoin(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index e652cf8ce..830632407 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -94,7 +94,7 @@ public interface WxCouponOrderMapper extends CommonMapper { - void offExpiredCouponOrderByValidDate(); + List findExpiredFreeCouponOrderByValidDate(); List findExpiredCouponOrderByValidDate(); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxDeviceMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxDeviceMapper.java new file mode 100644 index 000000000..ab43d5cd2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxDeviceMapper.java @@ -0,0 +1,12 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxDevice; + +import java.util.List; + +public interface WxDeviceMapper extends CommonMapper { + + List findList(WxDevice wxDevice); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java index 4cef2fec9..26d00aa9b 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxFlowRecordMapper.java @@ -8,5 +8,5 @@ public interface WxFlowRecordMapper extends CommonMapper { List findList(WxFlowRecord flowRecord); - + void updateCurrStatus(WxFlowRecord record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxGameActionLogMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxGameActionLogMapper.java index e11f8d43a..c5e778152 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxGameActionLogMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxGameActionLogMapper.java @@ -8,6 +8,6 @@ import java.util.List; public interface WxGameActionLogMapper extends CommonMapper { List findList(WxGameActionLog wxGameActionLog); - int getCount(WxGameActionLog wxGameActionLog); - + int getPlayCount(WxGameActionLog wxGameActionLog); + int getAwardCount(WxGameActionLog wxGameActionLog); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java index 6979d26b2..7de6bf29e 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java @@ -8,7 +8,7 @@ import com.iformall.domain.vo.WxMerchantVo; public interface WxMerchantMapper extends CommonMapper { List findList(WxMerchant wxMerchant); - + List findListCVo(WxMerchantVo wxMerchantVo); WxMerchantVo getMerchantByCode(HashMap params); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java new file mode 100644 index 000000000..0cc02bf2d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java @@ -0,0 +1,18 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.WxMsgRecord; + +import java.util.List; + +public interface WxMsgRecordMapper extends CommonMapper { + + void update(BaseMsg record); + + List findList(WxMsgRecord record); + + void update(WxMsgRecord record); + + void save(WxMsgRecord record); +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java new file mode 100644 index 000000000..ed4bbb8b4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderGroupMapper.java @@ -0,0 +1,35 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxOrderGroup; +import com.iformall.domain.vo.WxOrderGroupMarketing; + +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +public interface WxOrderGroupMapper extends CommonMapper { + + Map queryRemainOne(WxOrderGroup group); + + List> queryOrderGroup(WxOrder wxOrder); + + int updateOrderGroup(WxOrderGroup wxOrderGroup); + + List queryOrderGroupMarketingList(WxOrderGroupMarketing marketing); + + List> queryOrderGroupSuccessCountAndTime(Map params); + + List> queryOrderGroupVerifyCountAndTime(Map params); + + long queryOrderGroupCount(Map params); + + long queryOrderGroupSuccessCount(Map params); + + long queryOrderGroupPeopleCount(Map params); + +} + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java index 5e029389e..f2e339f37 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java @@ -42,4 +42,5 @@ public interface WxOrderMapper extends CommonMapper { WxOrderCouponPressVo selectDetailOfPress(WxOrder wxOrder); void updateStatusByPressCouponId(WxOrder wxOrder); + void updateStatusByOrderGroupId(WxOrder order); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxPayOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxPayOrderMapper.java index f5fdcaaef..298dab3b3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxPayOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxPayOrderMapper.java @@ -3,8 +3,11 @@ package com.iformall.mapper; import java.util.*; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxPayOrder; +import com.iformall.domain.vo.WxPayOrderVo; public interface WxPayOrderMapper extends CommonMapper { List findList(WxPayOrder wxPayOrder); + + List findListOfPaidOrderByDate(Map dateMap); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java index cc0efd48a..25b866896 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxPropertyContractMapper.java @@ -39,4 +39,10 @@ public interface WxPropertyContractMapper extends CommonMapper getRentInvalidList(WxRentContract wxRentContract); void updateStatus(WxRentContract wxRentContract); + + long queryOweCount(WxRentContract wxRentContract); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxScreenAdMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxScreenAdMapper.java new file mode 100644 index 000000000..12ddab640 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxScreenAdMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxScreenAd; + + +import java.util.List; + +public interface WxScreenAdMapper extends CommonMapper { + + List findList(WxScreenAd wxScreenAd); + + void offScreeAdByCouponChannelStatus(); + void updateStatusByCouponChannelId(WxScreenAd wxScreenAd); + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java index 2104ef3ed..630277d27 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxShopMapper.java @@ -26,4 +26,5 @@ public interface WxShopMapper extends CommonMapper { int hasShopNumber(WxShop wxShop); + List> findListWithMerchantMap(WxShop record); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxWeappAuditStatusMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxWeappAuditStatusMapper.java new file mode 100644 index 000000000..2a920843c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxWeappAuditStatusMapper.java @@ -0,0 +1,24 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxWeappAuditStatus; +import com.iformall.domain.vo.WxWeappAuditStatusVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface WxWeappAuditStatusMapper extends CommonMapper { + + List findList(WxWeappAuditStatus weappAuditStatus); + + List findVoList(WxWeappAuditStatusVo weappAuditStatusVo); + + List findUserVersions(@Param(value = "type") Integer type, @Param(value = "auditStatus") Integer auditStatus); + + void updateStatus(WxWeappAuditStatus record); + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxWeappBasicSetMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxWeappBasicSetMapper.java new file mode 100644 index 000000000..2376a2d61 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxWeappBasicSetMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxWeappBasicSet; + +public interface WxWeappBasicSetMapper extends CommonMapper { + + List findList(WxWeappBasicSet wxWeappBasicSet); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxWeappCodeStatusMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxWeappCodeStatusMapper.java new file mode 100644 index 000000000..854a5971e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxWeappCodeStatusMapper.java @@ -0,0 +1,24 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxWeappCodeStatus; +import com.iformall.domain.vo.WxWeappCodeStatusVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface WxWeappCodeStatusMapper extends CommonMapper { + + List findList(WxWeappCodeStatus weappCodeStatus); + + List findVoList(WxWeappCodeStatusVo weappCodeStatusVo); + + List findUserVersions(@Param(value = "type") Integer type); + + void updateStatus(WxWeappCodeStatus weappCodeStatus); + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxWeappExtSetMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxWeappExtSetMapper.java new file mode 100644 index 000000000..accb1f184 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxWeappExtSetMapper.java @@ -0,0 +1,16 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxWeappExtSet; + +public interface WxWeappExtSetMapper extends CommonMapper { + + List findList(WxWeappExtSet wxWeappReleaseSet); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxWeappReleaseStatusMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxWeappReleaseStatusMapper.java new file mode 100644 index 000000000..8f72957be --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxWeappReleaseStatusMapper.java @@ -0,0 +1,24 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxWeappReleaseStatus; +import com.iformall.domain.vo.WxWeappReleaseStatusVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface WxWeappReleaseStatusMapper extends CommonMapper { + + List findList(WxWeappReleaseStatus wxWeappReleaseStatus); + + List findVoList(WxWeappReleaseStatusVo weappReleaseStatusVo); + + List findUserVersions(@Param(value = "type") Integer type); + + void updateStatus(WxWeappReleaseStatus weappRelaseStatus); + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/mq/MQConfig.java b/mallinkService/src/main/java/com/iformall/mq/MQConfig.java new file mode 100644 index 000000000..ffdc5daf1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mq/MQConfig.java @@ -0,0 +1,8 @@ +package com.iformall.mq; + +public class MQConfig { + public static class Impl { + public static final String RABBIT_MQ = "rabbitMQ"; + public static final String ROCKET_MQ = "rocketMQ"; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java b/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java new file mode 100644 index 000000000..505e04406 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mq/MqBaseProducer.java @@ -0,0 +1,8 @@ +package com.iformall.mq; + +import com.iformall.domain.po.BaseMsg; + +public interface MqBaseProducer { + + void sendMessage(BaseMsg record, String topic, String tags, String keys); +} diff --git a/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java b/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java new file mode 100644 index 000000000..948134008 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mq/impl/RabbitMqMessageProducer.java @@ -0,0 +1,48 @@ +package com.iformall.mq.impl; + +import com.iformall.domain.po.BaseMsg; +import com.iformall.enums.EnumMsgRecordStatus; +import com.iformall.mapper.WxMsgRecordMapper; +import com.iformall.mq.MQConfig; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxMsgRecordService; +import com.iformall.utils.JsonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; + +/** + * @Auther: Stormeye + * @Date: 2019-01-31 + * @Description: RocketMQ消息生产者 + */ +@Service +@Profile(MQConfig.Impl.RABBIT_MQ) +public class RabbitMqMessageProducer implements MqBaseProducer { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + @Autowired + private AmqpTemplate rabbitTemplate; + @Autowired + private WxMsgRecordMapper wxMsgRecordMapper; + @Autowired + private WxMsgRecordService wxMsgRecordService; + + + @Override + public void sendMessage(BaseMsg data, String topic, String tags, String keys) { + try { + wxMsgRecordService.save(data); + + rabbitTemplate.convertAndSend(topic, JsonUtil.obj2Json(data)); + + data.setMsgStatus(EnumMsgRecordStatus.SEND_SUCC.getCode()); + wxMsgRecordMapper.update(data); + } catch (Exception e) { + log.error("RabbitMqMessageProducer: Send Message Error ", e); + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java new file mode 100644 index 000000000..13db5f4f4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java @@ -0,0 +1,90 @@ +package com.iformall.mq.impl; + +import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.WxMsg; +import com.iformall.domain.po.WxMsgRecord; +import com.iformall.enums.EnumMsgRecordStatus; +import com.iformall.mapper.WxMsgRecordMapper; +import com.iformall.mq.MQConfig; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxMsgRecordService; +import com.iformall.utils.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.remoting.common.RemotingHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import java.util.UUID; + +/** + * @Auther: Stormeye + * @Date: 2019-01-31 + * @Description: RocketMQ消息生产者 + */ +@Service +@Profile(MQConfig.Impl.ROCKET_MQ) +public class RocketMqMessageProducer implements MqBaseProducer { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Value("${spring.rocketmq.nameServer}") + private String namesrvAddr; + + private static final DefaultMQProducer producer = new DefaultMQProducer("DefaultProducer"); + + @Autowired + private WxMsgRecordMapper wxMsgRecordMapper; + + @Autowired + private WxMsgRecordService wxMsgRecordService; + + @PostConstruct + public void start(){ + try { + producer.setNamesrvAddr(namesrvAddr); + producer.start(); + log.info("Message Producer Start..."); + }catch (Exception e){ + log.error("Message Producer Start Error!!",e); + } + } + + @Override + public void sendMessage(BaseMsg data, String topic, String tags, String keys) { + try { + wxMsgRecordService.save(data); + + byte[] messageBody = JsonUtil.obj2Json(data).getBytes(RemotingHelper.DEFAULT_CHARSET); + + Message mqMsg = new Message(topic, tags, keys, messageBody); + if(data.getDelayTimeLevel() > 0){ + mqMsg.setDelayTimeLevel(data.getDelayTimeLevel()); + } + + producer.send(mqMsg, new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info("Message Producer: Send Message Success {}", sendResult); + data.setMsgStatus(EnumMsgRecordStatus.SEND_SUCC.getCode()); + wxMsgRecordMapper.update(data); + } + + @Override + public void onException(Throwable throwable) { + log.error("Message Producer: Send Message Error ", throwable); + } + }); + } catch (Exception e) { + log.error("Message Producer: Send Message Error ", e); + } + + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/MallRolePermissionService.java b/mallinkService/src/main/java/com/iformall/service/MallRolePermissionService.java index 689f69392..669c62c33 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallRolePermissionService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallRolePermissionService.java @@ -3,17 +3,27 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.MallRolePermission; +import java.util.List; + public interface MallRolePermissionService { /** * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(MallRolePermission record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(MallRolePermission record); /** * 根据Id获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java index 3c2c9be82..577ff348f 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java @@ -3,6 +3,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.vo.MallUserInfoVo; import java.util.List; @@ -81,20 +82,60 @@ public interface MallUserInfoService { ResultData updatepwd(MallUserInfo user, String code); + boolean checkCodeValid(MallUserInfo user, String code); + /** * 根据phone获得实体 * * @param phone * @return */ - MallUserInfo getByPhone(String phone); + MallUserInfo getByPhone(String phone, String tenantId); + /** - * 根据OpenId获得实体 + * 根据phone获得实体列表 + * + * @param phone + * @return + */ + List getUserByPhone(String phone); + + /** + * 根据B端OpenId获得实体 * * @param openId * @return */ - MallUserInfo getByOpenId(String openId); + MallUserInfo getByBOpenId(String openId, String tenantId); + + void updateBOpenId(MallUserInfo user); + + /** + * 根据web端OpenId获得实体 + * + * @param webOpenId + * @return + */ + List getByWebOpenId(String webOpenId); + + /** + * 根据phone获得展示列表 + * + * @param webOpenId + * @return + */ + List getUsersByWebOpenId(String webOpenId); + + /** + * 根据用户名webOpenId查询用户对象 + * @param username + * @return + */ + MallUserInfo getByUsernameWebOpenId(String username, String webOpenId); + + void updateWebOpenId(MallUserInfo user); + + void cleanWebOpenId(MallUserInfo user); /** * 根据条件用户列表 diff --git a/mallinkService/src/main/java/com/iformall/service/MallUserRoleService.java b/mallinkService/src/main/java/com/iformall/service/MallUserRoleService.java index 9844f5857..3b42ddf60 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallUserRoleService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallUserRoleService.java @@ -1,6 +1,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.MallUserRole; import java.util.List; @@ -11,11 +12,19 @@ public interface MallUserRoleService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(MallUserRole record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(MallUserRole record); /** * 根据Id获得实体 @@ -50,6 +59,20 @@ public interface MallUserRoleService { void deleteByUserId(Long uid); + + /** + * 检查用户是否有移动塔台权限 + * @param userInfo + * @return + */ + boolean checkIsMobileAdmin(MallUserInfo userInfo); + + /** + * 获取用户menu权限 + * @param userInfo + * @return + */ + String getPermissionsByUser(MallUserInfo userInfo); diff --git a/mallinkService/src/main/java/com/iformall/service/MsgSendService.java b/mallinkService/src/main/java/com/iformall/service/MsgSendService.java new file mode 100644 index 000000000..264ef6088 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/MsgSendService.java @@ -0,0 +1,10 @@ +package com.iformall.service; + +import com.iformall.domain.po.BaseMsg; + +/** + * 发送消息 + */ +public interface MsgSendService { + void send(BaseMsg baseMsg) throws Exception; +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java index 1149123ec..de26477ef 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.WxAppinfo; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; public interface WxAppinfoService { @@ -17,6 +18,14 @@ public interface WxAppinfoService { * @return */ PageInfo listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + List getList(WxAppinfo record); /** * 根据Id获得实体 @@ -59,7 +68,7 @@ public interface WxAppinfoService { * 更新accessToken * @param appId */ - void tokenUpdate(String appId); + void ctokenUpdate(String appId); /** * 位置码/导购码生成 diff --git a/mallinkService/src/main/java/com/iformall/service/WxAuthorizerInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxAuthorizerInfoService.java new file mode 100644 index 000000000..c09398677 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxAuthorizerInfoService.java @@ -0,0 +1,81 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.vo.WxWeappInfo; + +import java.util.List; + +public interface WxAuthorizerInfoService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxAuthorizerInfo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listVoAsPage(WxWeappInfo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * @param record + * @return + */ + List getList(WxWeappInfo record); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxAuthorizerInfo getById(Long id); + + /** + * 根据appId获得实体 + * + * @param appId + * @return + */ + WxAuthorizerInfo getByAppId(String appId); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxAuthorizerInfo record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + void updateReleaseVersion(WxAuthorizerInfo record); + + void updateBaseVersion(WxAuthorizerInfo record); + + void updateDomainUrl(WxAuthorizerInfo record); + + void updateWebDomainUrl(WxAuthorizerInfo record); + + void updateTemplate(WxAuthorizerInfo record); + + void updateOpenAppid(WxAuthorizerInfo record); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java index 8ef27a43d..270e5b0b0 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillAllService.java @@ -23,4 +23,5 @@ public interface WxBillAllService { void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll); + Object getBillInfo(WxBillAll wxBillAll); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java index 754955e10..8f9e3ca48 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillDepositService.java @@ -43,10 +43,9 @@ public interface WxBillDepositService { void deleteById(Long id); ResultData updatePaid(Long id); - - - - - + + ResultData returnDeposit(WxBillDeposit wxBillDeposit); + + ResultData adjustDeposit(WxBillDeposit wxBillDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java index a0090f37f..556ad8c88 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillOtherDepositService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillDeposit; import com.iformall.domain.po.WxBillOther; import com.iformall.domain.po.WxBillOtherDeposit; @@ -49,4 +50,7 @@ public interface WxBillOtherDepositService { ResultData updatePaid(Long id); + ResultData returnDeposit(WxBillOtherDeposit wxBillDeposit); + + ResultData adjustDeposit(WxBillOtherDeposit wxBillDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java index d5b234dc9..6663d40bb 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyDepositService.java @@ -49,11 +49,8 @@ public interface WxBillPropertyDepositService { ResultData updatePaid(Long id); + ResultData returnDeposit(WxBillPropertyDeposit wxBillPropertyDeposit); - - - - - + ResultData adjustDeposit(WxBillPropertyDeposit wxBillPropertyDeposit); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java index fd363fce9..b194d6d32 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillPropertyService.java @@ -3,7 +3,6 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxBillProperty; -import com.iformall.domain.po.WxBillRent; import java.util.Map; @@ -48,11 +47,10 @@ public interface WxBillPropertyService { void deleteById(Long id); - Object findByMerchantId(Long id); + PageInfo> findByPropertyContractId(Long id, String tenantId, Integer pageIndex, Integer pageSize); ResultData updatePaid(Long id); - - - - + + Object detail(Long id); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java b/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java index c640074db..0c1192d09 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBillRentService.java @@ -45,8 +45,13 @@ public interface WxBillRentService { void deleteById(Long id); - Object findByMerchantId(Long id); + PageInfo> findByRentContractId(Long id, String tenantId, Integer pageIndex, Integer pageSize); ResultData updatePaid(Long id); + Object detail(Long id); + + ResultData updateRevenue(WxBillRent wxBillRent); + + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java index 64ba1ecbe..5dc04a51d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java @@ -4,6 +4,8 @@ import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCardInfo; import com.iformall.domain.vo.WxCardVo; +import java.util.List; + public interface WxCardInfoService { /** @@ -15,7 +17,7 @@ public interface WxCardInfoService { * @return */ PageInfo listAsPage(WxCardVo record, Integer pageIndex, Integer pageSize); - + /** * 根据Id获得实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java b/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java new file mode 100644 index 000000000..81bf43ad4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java @@ -0,0 +1,10 @@ +package com.iformall.service; + +import com.iformall.common.ResultData; + +import java.util.Map; + +public interface WxChartDataService { + ResultData queryData(Map params); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxComponentVerifyTicketService.java b/mallinkService/src/main/java/com/iformall/service/WxComponentVerifyTicketService.java new file mode 100644 index 000000000..154ecbebd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxComponentVerifyTicketService.java @@ -0,0 +1,41 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxComponentVerifyTicket; + +public interface WxComponentVerifyTicketService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxComponentVerifyTicket record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxComponentVerifyTicket getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxComponentVerifyTicket record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java index add4cf76e..460a44e22 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java @@ -31,12 +31,6 @@ public interface WxCouponChannelService { */ PageInfo listPageCVo(WxCouponChannel record, Integer pageIndex, Integer pageSize); - /** - * 根据实体查询couponChannelVo列表 - * @param record - * @return - */ - List findCouponChannelVo(WxCouponChannel record); WxCouponCVo findDetailVo(Long id); @@ -61,7 +55,7 @@ public interface WxCouponChannelService { * * @param record */ - void saveOrUpdate(WxCouponChannel record); + ResultData saveOrUpdate(WxCouponChannel record); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 41cb30749..ec4401ec8 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -4,14 +4,12 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; import com.iformall.domain.vo.*; -import java.util.Date; -import java.util.List; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.List; public interface WxCouponOrderService { @@ -102,14 +100,13 @@ public interface WxCouponOrderService { * @param record C端用户 */ - ResultData listCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize); + PageInfo listCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize); /** * C用户查券详情 * - * @param cUserId C端用户 */ - ResultData detailCUserVo(Long cUserId, String couponOrderId); + WxCouponOrderCVo detailCUserVo(String couponOrderId); /** * C用户查券carlist @@ -178,4 +175,9 @@ public interface WxCouponOrderService { * @param ownerId C端用户 */ ResultData cardDetailCUserVo(Long ownerId, String couponOrderId); + + ResultData cardAccept(WxCouponOrder wxCouponOrder); + + ResultData queryCardStatus(WxCouponOrder wxCouponOrder); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index bdda8f34a..10cae0939 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -4,11 +4,13 @@ import java.util.*; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.vo.WxCouponCVo; public interface WxCouponService { + + ResultData listType(WxCoupon wxCoupon, Integer pageNum, Integer pageSize, Integer type); + /** * 根据实体查询分页列表 * @@ -18,7 +20,38 @@ public interface WxCouponService { * @return */ PageInfo listAsPage(WxCoupon record, Integer pageIndex, Integer pageSize, Integer type); - + + /** + * 列表 + * @param record + * @return + */ + List list(WxCoupon record); + + + /** + * 卡类列表,包括统计 + * @param record + * @return + */ + PageInfo findCountData(WxCoupon record,Integer pageNum, Integer pageSize); + + /** + * 卷列表,包括统计 + * @param record + * @return + */ + PageInfo findCouponData(WxCoupon record,Integer pageNum, Integer pageSize); + + /** + * 砍价列表,包括统计 + * @param record + * @param pageNum + * @param pageSize + * @return + */ + PageInfo findPressData(WxCoupon record,Integer pageNum, Integer pageSize); + /** * 根据Id获得实体 * @@ -44,4 +77,108 @@ public interface WxCouponService { void deleteById(Long id); + /** + * 查询时间段内销售金额 + * @param wxCoupon + * @return + */ + List findSaleMoneyByDate(WxCoupon wxCoupon); + + /** + * 查询时间段内核销金额 + * @param wxCoupon + * @return + */ + List findPaymentByDate(WxCoupon wxCoupon); + + /** + * 查询售出卡数量 + * @return + */ + Long findSaleCardCount(WxCoupon wxCoupon); + + /** + * 查询转增数量 + * @return + */ + Long findTranCardCount(WxCoupon wxCoupon); + + /** + * 查询补贴金额 + * @return + */ + Long findSubsidyMoney(WxCoupon wxCoupon); + + //----------------卷-------------- + /** + * 卷发放数量 + * @return + */ + //List findCouponSendCount(WxCoupon wxCoupon); + + /** + * 卷购买数量 + * @return + */ + List findCouponOrderCount(WxCoupon wxCoupon); + + /** + * 卷领取数量 + * @return + */ + //List findCouponGetCount(WxCoupon wxCoupon); + + /** + * 卷核销数量 + * @return + */ + List findCouponPaymentCount(WxCoupon wxCoupon); + + /** + * 有价卷销售数量 + * @return + */ + List priceCouponSaleCount(WxCoupon wxCoupon); + + /** + * 有价卷核销数量 + * @return + */ + List priceCouponPaymentCount(WxCoupon wxCoupon); + + Long findSumPriceSaleMoney(WxCoupon wxCoupon); + Long findSumPricePayMent(WxCoupon wxCoupon); + Long findSumSubsidyMoney(WxCoupon wxCoupon); + + + /** + * 砍价发起次数走势 + * @return + */ + List pressSendHistory(WxCoupon wxCoupon); + /** + * 砍价成功次数走势 + * @return + */ + List pressSuccHistory(WxCoupon wxCoupon); + /** + * 砍价核销数量走势 + * @return + */ + List pressPaymentHistory(WxCoupon wxCoupon); + /** + * 砍价转化率 + * @return + */ + String pressSuccRate(WxCoupon wxCoupon); + /** + * 商场补贴金额 + * @return + */ +// Long sumSubsidy(WxCoupon wxCoupon); + /** + * 砍价参与人数 + * @return + */ + Long sumJoin(WxCoupon wxCoupon); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxDeviceService.java b/mallinkService/src/main/java/com/iformall/service/WxDeviceService.java new file mode 100644 index 000000000..4b0dec811 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxDeviceService.java @@ -0,0 +1,58 @@ +package com.iformall.service; + + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxDevice; + +import java.util.List; + +public interface WxDeviceService { + + + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxDevice record, Integer pageIndex, Integer pageSize); + + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxDevice getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxDevice record); + + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + List findList(WxDevice record); + + + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/WxFlowRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxFlowRecordService.java index 23c7b0171..ea07ec8f3 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxFlowRecordService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxFlowRecordService.java @@ -19,5 +19,4 @@ public interface WxFlowRecordService { void saveOrUpdate(WxFlowRecord flowRecord); - } diff --git a/mallinkService/src/main/java/com/iformall/service/WxFlowService.java b/mallinkService/src/main/java/com/iformall/service/WxFlowService.java index 70a31ebee..21fb6c09c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxFlowService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxFlowService.java @@ -1,6 +1,9 @@ package com.iformall.service; +import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCarCmdLog; +import com.iformall.domain.po.WxFlowRecord; import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; import java.util.Map; @@ -13,10 +16,10 @@ public interface WxFlowService { /** * 更新业务数据状态 - * @param businessId - * @param flowType + * @param mapInfo + * @param applyStatus */ - void updateBusinessStatus(Long businessId,Integer flowType,Integer contractType,Integer applyStatus,Boolean supplement); + void updateBusinessStatus(Map mapInfo,Integer applyStatus); ResultData getTaskStatusList(Long businessId,String tenantId); @@ -34,7 +37,7 @@ public interface WxFlowService { * @param pageSize * @return */ - ResultData list(Integer flowType,Integer pageNum, Integer pageSize,Long userId); + ResultData list(String flowType,Integer pageNum, Integer pageSize,Long userId); /** * 审批历史 @@ -55,7 +58,14 @@ public interface WxFlowService { * @param params * @return */ - ResultData reject(@RequestBody Map params,Long userId,String userName,String tenantId); + ResultData reject(@RequestBody Map params,Long userId,String userName,String tenantId); + + /** + * 撤回 + * @param params + * @return + */ + ResultData setBack(Map params,Long userId,String userName); /** * 生成流程图 @@ -64,4 +74,11 @@ public interface WxFlowService { * @throws Exception */ void genProcessDiagram(HttpServletResponse httpServletResponse, String businessId) throws Exception; + + /** + * 我的申请列表 + * @param pageSize + * @return + */ + PageInfo listAsPage(WxFlowRecord record, Integer pageIndex, Integer pageSize); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxGameService.java b/mallinkService/src/main/java/com/iformall/service/WxGameService.java index 6615bf8c7..faa72ba10 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxGameService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxGameService.java @@ -24,10 +24,9 @@ public interface WxGameService { */ WxGame getOne(WxGame record); + ResultData addActionLog(Long userId, Long gameId, Long orderId); - void addActionLog(WxGameActionLog wxGameActionLog); - - ResultData checkLimit(Long gameId, Long userId); + ResultData getCount(Long gameId, Long userId); /** * 根据Id获得实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java index fe94ba44c..e5ce57f7a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMerchantService.java @@ -23,7 +23,7 @@ public interface WxMerchantService { * @return */ PageInfo listAsPage(WxMerchant record, Integer pageIndex, Integer pageSize); - + PageInfo listAsPageCVo(WxMerchantVo record, Integer pageIndex, Integer pageSize); /** * 根据code查询 * diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java new file mode 100644 index 000000000..252e9b9c5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java @@ -0,0 +1,13 @@ +package com.iformall.service; + +import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.WxMsgRecord; +import java.util.List; + +public interface WxMsgRecordService { + void save(BaseMsg baseMsg); + + List findList(WxMsgRecord record); + + void update(WxMsgRecord record); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgService.java index f7d1e3a8f..e692a830c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgService.java @@ -43,4 +43,5 @@ public interface WxMsgService { void sendMsgFromCouponInject(WxMsg wxmsg, WxMsgConfig wxMsgConfig, WxCouponInject record); + void addMsgCallback(WxMsg wxmsg, String batchNo); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java index 2127cc5d1..3deb81378 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java @@ -7,21 +7,10 @@ import com.iformall.domain.po.WxMsgValidationcode; import java.util.Map; public interface WxMsgValidationcodeService { - - /** - * 发送审批流通知短信 - * @param wxMsgValidationcode - * @param dynamicContentMap 动态替换的内容 - * @return - */ - ResultData sendWorkFlowNodify(WxMsgValidationcode wxMsgValidationcode, Map dynamicContentMap); - /** * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit * @return */ PageInfo listAsPage(WxMsgValidationcode record, Integer pageIndex, Integer pageSize); @@ -54,7 +43,7 @@ public interface WxMsgValidationcodeService { ResultData hasvalidationcode(WxMsgValidationcode record); - - + + void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderGroupService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderGroupService.java new file mode 100644 index 000000000..2672ecd11 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderGroupService.java @@ -0,0 +1,36 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxOrderGroup; +import com.iformall.domain.vo.WxOrderGroupMarketing; + +import java.util.List; +import java.util.Map; + +/** + * @author gongbiao + */ +public interface WxOrderGroupService { + + void createOrderGroup(WxOrder order, WxCoupon wxCoupon); + + ResultData queryRemainOne(WxOrderGroup wxOrderGroup, Long userId); + + PageInfo> queryOrderGroup(WxOrder wxOrder, Integer pageNum, Integer pageSize); + + ResultData toOrderGroup(WxOrderGroup wxOrderGroup); + + ResultData queryOrderGroupStatus(WxOrderGroup wxOrderGroup); + + ResultData queryAttendStatus(WxOrderGroup wxOrderGroup); + + void updateGroupStatus(WxOrderGroup wxOrderGroup); + + List findList(WxOrderGroup group); + + PageInfo queryOrderGroupMarketingList(WxOrderGroupMarketing marketing, Integer pageNum, Integer pageSize); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index 22902da61..166f552fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -37,9 +37,10 @@ public interface WxOrderService { * 提交订单 * @param user * @param couponId + * @param orderGroupId * @return 订单id */ - WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress); + WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId); /** * 付款码支付 @@ -157,4 +158,7 @@ public interface WxOrderService { WxOrderCouponPressVo detailPressVo(WxOrder record); void updateStatusByPressCouponId(Long couponId,String tenantId,int orderStatus); + + void updateOrderStatus(WxOrder order); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java index b90d6f058..1f341f0e1 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java @@ -63,8 +63,9 @@ public interface WxPayOrderService { * * @param record * @param transactionId + * @param from */ - void handleOrderPaySuccess(WxPayOrder record, String transactionId); + void handleOrderPaySuccess(WxPayOrder record, String transactionId, Integer from); /** * 刷卡支付成功处理 @@ -81,15 +82,6 @@ public interface WxPayOrderService { */ void handlePayOrderStatusUpdate(WxPayOrder record, int status); - /** - * 页面回调 - * - * @param paramMap 页面通知参数 - * @param payWay 支付方式 - * @return - */ - void callback(Map paramMap, EnumPayWay payWay); - /** * 保存或更新实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/WxPropertyContractService.java b/mallinkService/src/main/java/com/iformall/service/WxPropertyContractService.java index f9e666102..81c8289b2 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPropertyContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPropertyContractService.java @@ -1,10 +1,13 @@ package com.iformall.service; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillProperty; import com.iformall.domain.po.WxPropertyContract; +import com.iformall.domain.po.WxRentContract; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Map; /** diff --git a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java index e24d3f5ff..7fccf9ce4 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java @@ -1,6 +1,5 @@ package com.iformall.service; -import java.util.*; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; @@ -8,6 +7,8 @@ import com.iformall.domain.po.WxRefundOrder; import com.iformall.enums.EnumPayType; import com.iformall.enums.EnumPayWay; +import java.util.Map; + public interface WxRefundOrderService { @@ -94,12 +95,10 @@ public interface WxRefundOrderService { * @param id */ void deleteById(Long id); - - - - - - - + + ResultData returnMoney(WxAppinfo appInfo, Long orderId); + + boolean hasRefundOrder(Long orderId, Integer status); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java index 0ab69056f..88a15e878 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java @@ -1,11 +1,14 @@ package com.iformall.service; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillRent; import com.iformall.domain.po.WxMerchant; import com.iformall.domain.po.WxRentContract; +import io.swagger.models.auth.In; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Map; /** @@ -68,8 +71,8 @@ public interface WxRentContractService { void updateApplyStatus(WxRentContract wxRentContract); - void buildRent(WxMerchant wxMerchant, Long userId); + List buildRent(WxMerchant wxMerchant, Long userId,WxRentContract rentContract,Integer isPreview); - void buildDeposit(WxMerchant wxMerchant, Long userId); + void buildDeposit(WxMerchant wxMerchant, Long userId,Long rentContractId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxScreenAdService.java b/mallinkService/src/main/java/com/iformall/service/WxScreenAdService.java new file mode 100644 index 000000000..17bb68bb1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxScreenAdService.java @@ -0,0 +1,62 @@ +package com.iformall.service; + + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxScreenAd; + +import java.util.List; + +public interface WxScreenAdService { + + + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxScreenAd record, Integer pageIndex, Integer pageSize); + + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxScreenAd getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData saveOrUpdate(WxScreenAd record); + + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + List findList(WxScreenAd record); + + + + void updateStatusByCouponChannelId(Long couponChannelId, String tenantId, int status); + + void updateStatusByCouponId(Long couponId, String tenantId, int status); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxShopService.java b/mallinkService/src/main/java/com/iformall/service/WxShopService.java index 5a434f51f..105e59e1a 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxShopService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxShopService.java @@ -4,6 +4,8 @@ import java.util.*; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.WxShop; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; public interface WxShopService { @@ -50,4 +52,11 @@ public interface WxShopService { PageInfo> listShopFromContract(WxShop wxShop, Integer pageNum, Integer pageSize); + /** + * 导出商铺数据 + * @param wxShop + * @param request + * @param response + */ + void exportShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxTemplateMsgService.java b/mallinkService/src/main/java/com/iformall/service/WxTemplateMsgService.java index 33e8cb40a..d3028376c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxTemplateMsgService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxTemplateMsgService.java @@ -9,8 +9,8 @@ public interface WxTemplateMsgService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(WxTemplateMsg record, Integer pageIndex, Integer pageSize); @@ -22,6 +22,14 @@ public interface WxTemplateMsgService { * @return */ WxTemplateMsg getById(Long id); + + /** + * 根据Obj获得实体 + * + * @param record + * @return + */ + WxTemplateMsg getByObj(WxTemplateMsg record); /** * 保存或更新实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java b/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java index 0978b2098..d4aae5264 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java @@ -11,11 +11,19 @@ public interface WxUserVisitService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(WxUserVisit record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(WxUserVisit record); /** * 根据Id获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxWeappAuditStatusService.java b/mallinkService/src/main/java/com/iformall/service/WxWeappAuditStatusService.java new file mode 100644 index 000000000..f7abd623c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxWeappAuditStatusService.java @@ -0,0 +1,75 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappAuditStatus; +import com.iformall.domain.vo.WxWeappAuditStatusVo; + +import java.util.List; +import java.util.Map; + +public interface WxWeappAuditStatusService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxWeappAuditStatusVo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(WxWeappAuditStatusVo record); + + /** + * 查询version列表 + * + * @return + */ + List getVersionList(Integer type, Integer auditStatus); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxWeappAuditStatus getById(Long id); + + /** + * 根据appId获得实体 + * + * @param appId + * @return + */ + WxWeappAuditStatus getByAppId(String appId); + + /** + * 保存实体 + * + * @param record + */ + void saveStatus(WxWeappAuditStatus record); + + /** + * 更新audit Status + * + * @param record + */ + void updateStatus(WxWeappAuditStatus record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxWeappBasicSetService.java b/mallinkService/src/main/java/com/iformall/service/WxWeappBasicSetService.java new file mode 100644 index 000000000..7ddbddc0a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxWeappBasicSetService.java @@ -0,0 +1,54 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappBasicSet; + +public interface WxWeappBasicSetService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxWeappBasicSet record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxWeappBasicSet getById(Long id); + + /** + * 根据type and deploy获取 + * @param weappBasicSet + * @return + */ + WxWeappBasicSet getByTypeAndDeploy(WxWeappBasicSet weappBasicSet); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxWeappBasicSet record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxWeappCodeStatusService.java b/mallinkService/src/main/java/com/iformall/service/WxWeappCodeStatusService.java new file mode 100644 index 000000000..e7e48d43b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxWeappCodeStatusService.java @@ -0,0 +1,75 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappCodeStatus; +import com.iformall.domain.vo.WxWeappCodeStatusVo; + +import java.util.List; +import java.util.Map; + +public interface WxWeappCodeStatusService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxWeappCodeStatusVo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(WxWeappCodeStatusVo record); + + /** + * 查询version列表 + * + * @return + */ + List getVersionList(Integer type); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxWeappCodeStatus getById(Long id); + + /** + * 根据appId获得实体 + * + * @param appId + * @return + */ + WxWeappCodeStatus getByAppId(String appId); + + /** + * 保存实体 + * + * @param record + */ + void saveStatus(WxWeappCodeStatus record); + + /** + * 更新codeCommit Status + * + * @param record + */ + void updateStatus(WxWeappCodeStatus record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxWeappExtSetService.java b/mallinkService/src/main/java/com/iformall/service/WxWeappExtSetService.java new file mode 100644 index 000000000..8edd36dae --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxWeappExtSetService.java @@ -0,0 +1,55 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappExtSet; + +public interface WxWeappExtSetService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxWeappExtSet record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxWeappExtSet getById(Long id); + + /** + * 根据Obj获得实体 + * + * @param record + * @return + */ + WxWeappExtSet getByObj(WxWeappExtSet record); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxWeappExtSet record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxWeappReleaseStatusService.java b/mallinkService/src/main/java/com/iformall/service/WxWeappReleaseStatusService.java new file mode 100644 index 000000000..eaa0a3034 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxWeappReleaseStatusService.java @@ -0,0 +1,78 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappCodeStatus; +import com.iformall.domain.po.WxWeappReleaseStatus; +import com.iformall.domain.vo.WxWeappAuditStatusVo; +import com.iformall.domain.vo.WxWeappCodeStatusVo; +import com.iformall.domain.vo.WxWeappReleaseStatusVo; + +import java.util.List; +import java.util.Map; + +public interface WxWeappReleaseStatusService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxWeappReleaseStatusVo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(WxWeappReleaseStatusVo record); + + /** + * 查询version列表 + * + * @return + */ + List getVersionList(Integer type); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxWeappReleaseStatus getById(Long id); + + /** + * 根据appId获得实体 + * + * @param appId + * @return + */ + WxWeappReleaseStatus getByAppId(String appId); + + /** + * 保存实体 + * + * @param record + */ + void saveStatus(WxWeappReleaseStatus record); + + /** + * 更新release Status + * + * @param record + */ + void updateStatus(WxWeappReleaseStatus record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java index 4d60a1fb2..8f6c70f99 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java @@ -177,9 +177,9 @@ public class DataTowerServiceImpl implements DataTowerService { //今日车流量*********************************************** private Map carRunning(String tenantId) { HashMap carMap = new HashMap<>(); - HashMap paramsCar = new HashMap<>(); + HashMap paramsCar = new HashMap<>(); paramsCar.put("tenantId", tenantId); - paramsCar.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + paramsCar.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); String startdate = DateUtils.getTimeBefore(30, new Date()); String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); @@ -477,9 +477,9 @@ public class DataTowerServiceImpl implements DataTowerService { @Override public Map queryCar(String tenantId) { - HashMap params = new HashMap<>(); + HashMap params = new HashMap<>(); params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); String startdate = DateUtils.getTimeBefore(30, new Date()); String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallRolePermissionServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallRolePermissionServiceImpl.java index a4f370b0c..11bbf3c94 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallRolePermissionServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallRolePermissionServiceImpl.java @@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class MallRolePermissionServiceImpl implements MallRolePermissionService { @@ -18,8 +20,6 @@ public class MallRolePermissionServiceImpl implements MallRolePermissionService @Autowired MallRolePermissionMapper mallUserRolePermissionMapper; - - @Override @@ -27,6 +27,11 @@ public class MallRolePermissionServiceImpl implements MallRolePermissionService return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> mallUserRolePermissionMapper.findList(record)); } + @Override + public List getList(MallRolePermission record) { + return mallUserRolePermissionMapper.findList(record); + } + @Override public MallRolePermission getById(Long id) { return mallUserRolePermissionMapper.selectByPrimaryKey(id); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index 927d205cf..6bab4c279 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -9,11 +9,13 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.MallUserRole; import com.iformall.domain.po.WxMsgValidationcode; +import com.iformall.domain.vo.MallUserInfoVo; import com.iformall.exception.MallinkException; import com.iformall.mapper.MallUserInfoMapper; import com.iformall.mapper.MallUserRoleMapper; import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.service.MallUserInfoService; +import net.sf.saxon.trans.Err; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,17 +55,62 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { @Override public MallUserInfo getById(Long id) { - return mallUserInfoMapper.selectByPrimaryKey(id); + return mallUserInfoMapper.selectById(id); } @Override - public MallUserInfo getByOpenId(String openId) { - return mallUserInfoMapper.selectByOpenId(openId); + public MallUserInfo getByBOpenId(String openId, String tenantId) { + return mallUserInfoMapper.selectByBOpenId(openId, tenantId); } @Override - public MallUserInfo getByPhone(String phone) { - return mallUserInfoMapper.selectByPhone(phone); + public void updateBOpenId(MallUserInfo user) { + MallUserInfo updateUser = new MallUserInfo(); + updateUser.setId(user.getId()); + updateUser.setBopenId(user.getBopenId()); + mallUserInfoMapper.updateByPrimaryKeySelective(user); + } + + @Override + public MallUserInfo getByPhone(String phone, String tenantId) { + return mallUserInfoMapper.selectByPhone(phone, tenantId); + } + + @Override + public List getUserByPhone(String phone) { + return mallUserInfoMapper.selectUsersByPhone(phone); + } + + @Override + public List getByWebOpenId(String webOpenId) { + return mallUserInfoMapper.selectByWebOpenId(webOpenId); + } + + @Override + public List getUsersByWebOpenId(String webOpenId) { + return mallUserInfoMapper.selectUsersByWebOpenId(webOpenId); + } + + @Override + public MallUserInfo getByUsernameWebOpenId(String username, String webOpenId) { + return mallUserInfoMapper.selectByUserNameWebOpen(username, webOpenId); + } + + @Override + public void updateWebOpenId(MallUserInfo user) { + MallUserInfo updateUser = new MallUserInfo(); + updateUser.setId(user.getId()); + updateUser.setWebOpenId(user.getWebOpenId()); + mallUserInfoMapper.updateByPrimaryKeySelective(updateUser); + } + + @Override + public void cleanWebOpenId(MallUserInfo user) { + MallUserInfo updateUser = new MallUserInfo(); + updateUser.setId(user.getId()); + updateUser.setTenantId(user.getTenantId()); + updateUser.setUsername(user.getUsername()); + mallUserInfoMapper.removeWebOpenId(updateUser); } @Override @@ -130,6 +177,25 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { @Override public ResultData updatepwd(MallUserInfo user, String code) { + if(checkCodeValid(user, code)) { + try { + MallUserInfo updateUser = new MallUserInfo(); + updateUser.setId(user.getId()); + updateUser.setTenantId(user.getTenantId()); + updateUser.setPassword(user.getPassword()); + mallUserInfoMapper.updateByPrimaryKeySelective(updateUser); + } catch (Exception e) { + logger.error("db failed: 用户-" + user.getUsername() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + } else { + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND, false); + } + return new ResultData(); + } + + @Override + public boolean checkCodeValid(MallUserInfo user, String code) { WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setTenantId(user.getTenantId()); wxMsgValidationcode.setPhone(user.getPhone()); @@ -139,16 +205,10 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { wxmsgvalidationcodelist = wxmsgvalidationcodelist.stream().filter(validationcode -> validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList()); if (wxmsgvalidationcodelist.size() > 0) { - try { - mallUserInfoMapper.updateByPrimaryKey(user); - } catch (Exception e) { - logger.error("db failed: 用户-" + user.getUsername() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); - } + return true; } else { - return new ResultData(Result.ERROR,"验证码不存在或过期",false); + return false; } - return new ResultData(); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserRoleServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserRoleServiceImpl.java index 44f96e911..47700e328 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserRoleServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserRoleServiceImpl.java @@ -3,7 +3,13 @@ package com.iformall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; +import com.iformall.domain.po.MallRolePermission; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.MallUserRole; +import com.iformall.enums.EnumMenuType; +import com.iformall.enums.EnumUserAdmin; +import com.iformall.mapper.MallPermissionMapper; +import com.iformall.mapper.MallRolePermissionMapper; import com.iformall.mapper.MallUserRoleMapper; import com.iformall.service.MallUserRoleService; import org.slf4j.Logger; @@ -20,12 +26,20 @@ public class MallUserRoleServiceImpl implements MallUserRoleService { @Autowired MallUserRoleMapper mallUserRoleMapper; + @Autowired + MallRolePermissionMapper mallRolePermissionMapper; + @Override public PageInfo listAsPage(MallUserRole record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> mallUserRoleMapper.findList(record)); } + @Override + public List getList(MallUserRole record) { + return mallUserRoleMapper.findList(record); + } + @Override public MallUserRole getById(Long id) { return mallUserRoleMapper.selectByPrimaryKey(id); @@ -64,6 +78,58 @@ public class MallUserRoleServiceImpl implements MallUserRoleService { mallUserRoleMapper.deleteByUserId(uid); } + + @Override + public boolean checkIsMobileAdmin(MallUserInfo userInfo) { + boolean isInMobile = false; + if(EnumUserAdmin.ADMIN.getCode().equals(userInfo.getIsAdmin())) { // 超管 + isInMobile = true; + return isInMobile; + } + MallUserRole ur = new MallUserRole(); + ur.setUid(userInfo.getId()); + List userRoles = mallUserRoleMapper.findList(ur); + if (userRoles.size() > 0) { + MallUserRole userRole = userRoles.get(0); + Long roleId = userRole.getRoleId(); + MallRolePermission p = new MallRolePermission(); + p.setRoleId(roleId); + p.setTenantId(userInfo.getTenantId()); + List rolePermissions = mallRolePermissionMapper.findList(p); + for (MallRolePermission rp : rolePermissions) { + logger.info("user permission id " + rp.getPermissionId()); + if (EnumMenuType.MOBILE_ADMIN.getCode().equals(rp.getPermissionId().intValue())) { /// 移动端数据塔台 + isInMobile = true; + return isInMobile; + } + } + } + return isInMobile; + } + + @Override + public String getPermissionsByUser(MallUserInfo userInfo) { + MallUserRole ur = new MallUserRole(); + ur.setUid(userInfo.getId()); + List userRoleList = mallUserRoleMapper.findList(ur); + if (userRoleList.size() > 0) { + MallUserRole userRole = userRoleList.get(0); + Long roleId = userRole.getRoleId(); + MallRolePermission p = new MallRolePermission(); + p.setRoleId(roleId); + p.setTenantId(userInfo.getTenantId()); + List rolePermissionList = mallRolePermissionMapper.findList(p); + String menus = ""; + for (MallRolePermission rp : rolePermissionList) { + menus += rp.getPermissionId() + ","; + } + if (menus.length() > 0) { + menus = menus.substring(0, menus.length() - 1); + } + return menus; + } + return null; + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java index 38d997cad..a25dbfbbe 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MarkingDataReportServiceImpl.java @@ -283,7 +283,6 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { params.put("endTime", convertDateAndAdd(markingCouponDataReportDto.getEndTime(), 1)); //停车发券数 停车发券被核销数, 核销发券数 核销发券被核销数, B端刷卡支付发券数 刷卡支付发券被核销数 PageHelper.startPage(pageIndex, pageSize); - List list; if(markingCouponDataReportDto.getType().equals(EnumCouponSendSendType.CAR_STOP.getCode())) { @@ -301,7 +300,6 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { }else { PageHelper.clearPage(); list = new ArrayList(); - } @@ -365,6 +363,7 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { params.put("endTime", convertDateAndAdd(markingCouponDataReportDto.getEndTime(), 1)); params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); List markingSceneDataVos = wxCarCmdLogMapper.queryForSceneRepotyHistoryCar(params); + triggerCountMap = markingSceneDataVos.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getTriggerCount())); } else if(markingCouponDataReportDto.getType().equals(EnumCouponSendSendType.B_MICROPAY.getCode())){ // B端刷卡支付发券 //获取B端刷卡数 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java new file mode 100644 index 000000000..68c2a38cb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendCallBackSmsServiceImpl.java @@ -0,0 +1,120 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumMsgSendStatus; +import com.iformall.enums.EnumVerifyCode; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.*; +import com.iformall.service.MsgSendService; +import com.iformall.service.WxMsgService; +import com.iformall.service.WxMsgValidationcodeService; +import com.iformall.utils.DateUtils; +import com.iformall.utils.WiwideUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * @author luozukai + * 业务短信发送实现 + */ +@Service +public class SendCallBackSmsServiceImpl implements MsgSendService { + @Autowired + private WxMsgConfigMapper wxMsgConfigMapper; + @Autowired + private WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; + @Autowired + private WxMsgValidationcodeMapper wxMsgValidationcodeMapper; + @Autowired + private WxMsgValidationcodeService wxMsgValidationcodeService; + @Autowired + private WxMsgModelMapper wxMsgModelMapper; + @Autowired + private WxMsgMapper wxMsgMapper; + @Autowired + private WxMsgService wxMsgService; + + @Override + public void send(BaseMsg baseMsg) { + WxMsg record = (WxMsg)baseMsg; + + WxMsgConfig wxMsgConfig = record.getWxMsgConfig(); + if(wxMsgConfig == null){ + wxMsgConfig.setTenantId(record.getTenantId()); + List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); + if (wxMsgConfigs.size() == 0) { + throw new MallinkException(ErrorCode.MSG_CONFIG_NOT_FOUND); + } + wxMsgConfig = wxMsgConfigs.get(0); + if (wxMsgConfig.getRemains() == 0) { + throw new MallinkException(ErrorCode.MSG_SUM_ZERO); + } + if (wxMsgConfig.getRemains() < record.getExpectSendNumber()) { + throw new MallinkException(ErrorCode.MSG_SUM_INSUFFICENT); + } + } + WxCouponInject couponInject = record.getCouponInject(); + + String secret = wxMsgConfig.getSecret(); + String bid = wxMsgConfig.getBid(); + String publickey = wxMsgConfig.getPublickey(); + + String phone = record.getPhones(); + String signature = record.getSignature(); + String msg = record.getMsg(); + String notifyUrl = wxMsgConfig.getNotifyurl(); + WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(record.getModelId()); + Integer modelId = null; + if (wxMsgModel != null) { + modelId = wxMsgModel.getModelId(); + } + String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); + JSONObject jsonObjectResult = JSONObject.parseObject(result); + String ret = jsonObjectResult.get("ret").toString(); + String batchNo = jsonObjectResult.get("data").toString(); + //String resultMsg = jsonObjectResult.get("msg").toString(); + record.setReturnResult(jsonObjectResult.toJSONString()); + + if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { + record.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); + } else { + record.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); + } + + final IdWorker idWorker = IdWorker.get(); + long id = idWorker.nextId(); + WxMsg wxMsg = new WxMsg(); + wxMsg.setTenantId(record.getTenantId()); + wxMsg.setModelId(record.getModelId()); + wxMsg.setMsg(record.getMsg()); + wxMsg.setExpectSendNumber(record.getExpectSendNumber()); + wxMsg.setPhones(record.getPhones()); + wxMsg.setSignature(record.getSignature()); + wxMsg.setIsright(record.getIsright()); + wxMsg.setName(record.getName()); + wxMsg.setSendstatus(record.getSendstatus()); + wxMsg.setLabel(record.getLabel()); + wxMsg.setStatus(record.getStatus()); + wxMsg.setWay(record.getWay()); + wxMsg.setId(id); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); + wxMsg.setSendtime(systemTime); + wxMsg.setCreatetime(DateUtils.stringToDate(systemTime, "yyyy-MM-dd HH:mm:ss")); + //精准投放 + if (couponInject != null) { + wxMsg.setCouponInjectId(couponInject.getId()); + } + wxMsgMapper.insertSelective(wxMsg); + if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { + wxMsgService.addMsgCallback(wxMsg, batchNo); + } else { + throw new MallinkException(1001,"运营商返回失败:"+result); + } + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java new file mode 100644 index 000000000..947972d19 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendEmailServiceImpl.java @@ -0,0 +1,82 @@ +package com.iformall.service.impl; + +import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.MailMsg; +import com.iformall.service.MsgSendService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import javax.mail.internet.MimeMessage; +import java.io.File; + +/** + * 发送邮件 + * @author luozukai + * @date 2019/3/7 16:03 + */ +@Service +public class SendEmailServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private JavaMailSender sender; + + @Value("${spring.mail.username}") + private String from; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + MailMsg mailMsg = (MailMsg)baseMsg; + + if(mailMsg.isHtml()){ + MimeMessage message = sender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(mailMsg.getTo()); + helper.setSubject(mailMsg.getSubject()); + helper.setText(mailMsg.getMsg(), true); + + sender.send(message); + }else if(StringUtils.isNotBlank(mailMsg.getFilePath())){ + MimeMessage message = sender.createMimeMessage(); + String filePath = mailMsg.getFilePath(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(mailMsg.getTo()); + helper.setSubject(mailMsg.getSubject()); + helper.setText(mailMsg.getMsg(), true); + + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); + helper.addAttachment(fileName, file); + + sender.send(message); + }else if(StringUtils.isNotBlank(mailMsg.getRscI()) && StringUtils.isNotBlank(mailMsg.getRscPath())){ + MimeMessage message = sender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(mailMsg.getTo()); + helper.setSubject(mailMsg.getSubject()); + helper.setText(mailMsg.getMsg(), true); + + FileSystemResource res = new FileSystemResource(new File(mailMsg.getRscPath())); + helper.addInline(mailMsg.getRscI(), res); + + sender.send(message); + }else{ + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from); + message.setTo(mailMsg.getTo()); + message.setSubject(mailMsg.getSubject()); + message.setText(mailMsg.getMsg()); + sender.send(message); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java new file mode 100644 index 000000000..6c22ef120 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java @@ -0,0 +1,69 @@ +package com.iformall.service.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.*; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxTemplateMsgMapper; +import com.iformall.service.MsgSendService; +import com.iformall.service.WxAppinfoService; +import com.iformall.utils.MaUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * 发送微信小程序消息 + * @author luozukai + * @date 2019/3/7 16:03 + */ +@Service +public class SendSmartAppMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTemplateMsgMapper wxTemplateMsgMapper; + @Autowired + private WxAppinfoService wxAppinfoService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + SmartAppMsg smartAppMsg = (SmartAppMsg)baseMsg; + WxTemplateMsg msg = null; + WxMaTemplateMessage templateMessage; + + WxAppinfo appInfo = wxAppinfoService.getByAppId(smartAppMsg.getAppId()); + WxMaService wxMaService = MaUtil.getWeappService(appInfo); + + //查询信息模板 + WxTemplateMsg msgQ = new WxTemplateMsg(); + msgQ.setTenantId(smartAppMsg.getTenantId()); + msgQ.setType(smartAppMsg.getTemplateType()); + List list = wxTemplateMsgMapper.select(msgQ); + if (list.size() > 0) { + msg = list.get(0); + } + if (msg == null) { + logger.error("找不到模板Id"); + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); + } + /** + * 核销失败 + * 商品名称 {{keyword1.DATA}} + * 核销时间 {{keyword2.DATA}} + * 失败原因 {{keyword3.DATA}} + * 备注 {{keyword4.DATA}} + */ + templateMessage = WxMaTemplateMessage.builder() + .toUser(smartAppMsg.getTo()) + .formId(smartAppMsg.getFrom()) // 微信支付的formId是prepayId + .page(smartAppMsg.getGotopage()) + .data(smartAppMsg.getTemplateDataList()) + .templateId(msg.getTemplateId()) + .emphasisKeyword(smartAppMsg.getEmphasisKeyword()) + .build(); + wxMaService.getMsgService().sendTemplateMsg(templateMessage); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java new file mode 100644 index 000000000..c969201f7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java @@ -0,0 +1,107 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumVerifyCode; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxMsgConfigMapper; +import com.iformall.mapper.WxMsgValidationcodeMapper; +import com.iformall.mapper.WxMsgValidationcodeModelMapper; +import com.iformall.service.MsgSendService; +import com.iformall.service.WxMsgValidationcodeService; +import com.iformall.utils.WiwideUtil; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author luozukai + * 短信发送实现 + */ +@Service +public class SendSmsServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxMsgConfigMapper wxMsgConfigMapper; + @Autowired + private WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; + @Autowired + private WxMsgValidationcodeMapper wxMsgValidationcodeMapper; + @Autowired + private WxMsgValidationcodeService wxMsgValidationcodeService; + + @Override + public void send(BaseMsg baseMsg) { + WxMsgRecord record = (WxMsgRecord)baseMsg; + WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + wxMsgValidationcode.setPhone(record.getReceiver()); + wxMsgValidationcode.setTenantId(record.getTenantId()); + wxMsgValidationcode.setType(record.getModelType()); + + //3、从短信配置中查询密钥 bid 等信息 + WxMsgConfig wxMsgConfig = new WxMsgConfig(); + wxMsgConfig.setTenantId(record.getTenantId()); + List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); + if(CollectionUtils.isEmpty(wxMsgConfigs)){ + throw new MallinkException(ErrorCode.MSG_CONFIG_NOT_FOUND); + } + + wxMsgConfig = wxMsgConfigs.get(0); + + WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); + wxMsgValidationcodeModel.setTenantId(record.getTenantId()); + wxMsgValidationcodeModel.setType(record.getModelType()); + List modelList = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel); + if(CollectionUtils.isEmpty(modelList)){ + throw new MallinkException(ErrorCode.MSG_MODEL_NOT_FOUND); + } + + wxMsgValidationcodeModel = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel).get(0); + + String secret = wxMsgConfig.getSecret(); + String bid = wxMsgConfig.getBid(); + String publickey = wxMsgConfig.getPublickey(); + String phone = record.getReceiver(); + String signature = wxMsgValidationcodeModel.getSignature(); + wxMsgValidationcode.setSignature(signature); + //替换内容 + String msg = wxMsgValidationcodeModel.getContent(); + for (Map.Entry entry : record.getDynamicContentMap().entrySet()) { + msg = msg.replace("{"+entry.getKey()+"}", entry.getValue()); + } + wxMsgValidationcode.setMsg(msg); + + String notifyUrl = wxMsgConfig.getNotifyurl(); + Integer modelId = wxMsgValidationcodeModel.getModelId(); + String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); + JSONObject jsonObjectResult = JSONObject.parseObject(result); + String ret = jsonObjectResult.get("ret").toString(); + String batchNo = jsonObjectResult.get("data").toString(); + if (ret.equals("1")) { + final IdWorker idWorker = IdWorker.get(); + wxMsgValidationcode.setId(idWorker.nextId()); + long currentTime = System.currentTimeMillis() ; + Date createtime=new Date(currentTime); + wxMsgValidationcode.setCreatetime(createtime); + Integer minutes = wxMsgValidationcodeModel.getMinutes(); + if(minutes >0) { + currentTime += minutes * 60 * 1000; + Date expiredate = new Date(currentTime); + wxMsgValidationcode.setExpiretime(expiredate); + } + wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); + wxMsgValidationcodeService.addMsgCallback(wxMsgValidationcode,batchNo); + }else{ + throw new MallinkException(1001,"运营商返回失败:"+result); + } + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java index 0138a8c07..ea0e7b226 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java @@ -6,13 +6,12 @@ import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxAppinfo; import com.iformall.enums.EnumAppType; -import com.iformall.exception.MallinkException; import com.iformall.mapper.WxAppinfoMapper; import com.iformall.service.WxAppinfoService; import com.iformall.utils.Constant; +import com.iformall.utils.MaUtil; import com.iformall.utils.QRCodeUtils; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; @@ -61,6 +60,11 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxAppinfoMapper.findList(record)); } + @Override + public List getList(WxAppinfo record) { + return wxAppinfoMapper.findList(record); + } + @Override public WxAppinfo getById(Long id) { return wxAppinfoMapper.selectByPrimaryKey(id); @@ -82,10 +86,14 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { public void deleteById(Long id) { wxAppinfoMapper.deleteByPrimaryKey(id); } - - + + + /** + * 租户c端小程序更新token + * @param tenantId + */ @Override - public void tokenUpdate(String tenantId) { + public void ctokenUpdate(String tenantId) { WxAppinfo appQ = new WxAppinfo(); appQ.setTenantId(tenantId); appQ.setType(EnumAppType.C.getCode()); @@ -94,16 +102,14 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { return; } WxAppinfo appinfo = appList.get(0); + if(appinfo == null) { + return; + } // get access_token - WxMaInMemoryConfig config = new WxMaInMemoryConfig(); - config.setAppid(appinfo.getAppId()); - config.setSecret(appinfo.getSecret()); - if (null != appinfo.getAccessToken()) { - config.setAccessToken(appinfo.getAccessToken()); - config.setExpiresTime(appinfo.getLastTokenTime().getTime()); + WxMaService wxMaService = MaUtil.getWeappService(appinfo); + if(wxMaService == null) { + return; } - WxMaService wxMaService = new WxMaServiceImpl(); - wxMaService.setWxMaConfig(config); String access_token = ""; try{ @@ -115,7 +121,7 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { // update db appinfo.setAccessToken(access_token); appinfo.setLastTokenTime(date); - wxAppinfoMapper.updateByPrimaryKey(appinfo); + wxAppinfoMapper.updateByPrimaryKeySelective(appinfo); } private void downFile(String filePath, String filename, HttpServletResponse response, HttpServletRequest req) throws IOException { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAuthorizerInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAuthorizerInfoServiceImpl.java new file mode 100644 index 000000000..9ddce662d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAuthorizerInfoServiceImpl.java @@ -0,0 +1,184 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.po.WxWeappExtSet; +import com.iformall.domain.vo.WxWeappInfo; +import com.iformall.mapper.WxAppinfoMapper; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.mapper.WxWeappExtSetMapper; +import com.iformall.service.WxAuthorizerInfoService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +import java.util.Date; +import java.util.List; + +@Service +public class WxAuthorizerInfoServiceImpl implements WxAuthorizerInfoService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxAuthorizerInfoMapper authorizerInfoMapper; + + @Autowired + WxWeappExtSetMapper weappExtSetMapper; + + @Autowired + WxAppinfoMapper appinfoMapper; + + + @Override + public PageInfo listAsPage(WxAuthorizerInfo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> authorizerInfoMapper.findList(record)); + } + + @Override + public PageInfo listVoAsPage(WxWeappInfo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> authorizerInfoMapper.findVoList(record)); + } + + @Override + public List getList(WxWeappInfo record) { + return authorizerInfoMapper.findVoList(record); + } + + @Override + public WxAuthorizerInfo getById(Long id) { + return authorizerInfoMapper.selectByPrimaryKey(id); + } + + @Override + public WxAuthorizerInfo getByAppId(String appId) { + WxAuthorizerInfo authQ = new WxAuthorizerInfo(); + authQ.setAuthorizerAppid(appId); + try { + WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.selectOne(authQ); + return authorizerInfo; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return null; + } + + @Override + public void saveOrUpdate(WxAuthorizerInfo record) { + // 1. 添加到wx_authorizer_info表中 + // 2. 同时在wx_weapp_ext_set中添加一条记录 + // 3. 同时在wx_weapp_code_status中添加一条记录 + Date curDate = new Date(); + logger.info(record.toString()); + WxAuthorizerInfo authorizerInfo = null; + try { + WxAuthorizerInfo aiQ = new WxAuthorizerInfo(); + aiQ.setAuthorizerAppid(record.getAuthorizerAppid()); + authorizerInfo = authorizerInfoMapper.selectOne(aiQ); + } catch (Exception e) { + logger.error(e.getMessage()); + } + if (authorizerInfo == null) { + WxAppinfo appinfo = appinfoMapper.findByAppId(record.getAuthorizerAppid()); + if(appinfo != null) { + record.setId(appinfo.getId()); + } else { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + } + record.setCreateTime(curDate); + record.setUpdateTime(curDate); + // 授权表 添加 + authorizerInfoMapper.insertSelective(record); + // 扩展配置表添加 + WxWeappExtSet weappExtSet = new WxWeappExtSet(); + weappExtSet.setId(record.getId()); + weappExtSet.setAppId(record.getAuthorizerAppid()); + if(appinfo != null) { + weappExtSet.setType(appinfo.getType()); + } + weappExtSet.setCreateDate(curDate); + weappExtSet.setUpdateDate(curDate); + weappExtSetMapper.insertSelective(weappExtSet); + } else { + record.setId(authorizerInfo.getId()); + record.setUpdateTime(curDate); + logger.info(record.toString()); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + authorizerInfoMapper.deleteByPrimaryKey(id); + } + + @Override + public void updateReleaseVersion(WxAuthorizerInfo record) { + authorizerInfoMapper.updateReleaseInfo(record); + } + + @Override + public void updateBaseVersion(WxAuthorizerInfo record) { + Date curDate = new Date(); + WxAuthorizerInfo info = new WxAuthorizerInfo(); + info.setId(record.getId()); + info.setBaseStatus(record.getBaseStatus()); + info.setBaseTime(curDate); + info.setUpdateTime(curDate); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + + @Override + public void updateDomainUrl(WxAuthorizerInfo record) { + Date curDate = new Date(); + WxAuthorizerInfo info = new WxAuthorizerInfo(); + info.setId(record.getId()); + info.setDomainStatus(record.getDomainStatus()); + info.setDomainTime(curDate); + info.setUpdateTime(curDate); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + + @Override + public void updateWebDomainUrl(WxAuthorizerInfo record) { + Date curDate = new Date(); + WxAuthorizerInfo info = new WxAuthorizerInfo(); + info.setId(record.getId()); + info.setWebdomainStatus(record.getWebdomainStatus()); + info.setWebdomainTime(curDate); + info.setUpdateTime(curDate); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + + @Override + public void updateTemplate(WxAuthorizerInfo record) { + Date curDate = new Date(); + WxAuthorizerInfo info = new WxAuthorizerInfo(); + info.setId(record.getId()); + info.setTemplateStatus(record.getTemplateStatus()); + info.setTemplateTime(curDate); + info.setUpdateTime(curDate); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + + @Override + public void updateOpenAppid(WxAuthorizerInfo record) { + Date curDate = new Date(); + WxAuthorizerInfo info = new WxAuthorizerInfo(); + info.setId(record.getId()); + info.setOpenAppid(record.getOpenAppid()); + info.setBindOpenTime(curDate); + authorizerInfoMapper.updateByPrimaryKeySelective(record); + } + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java index ee3b84865..54fca6e98 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillAllServiceImpl.java @@ -57,6 +57,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Autowired WxBillOtherService wxBillOtherService; + @Autowired + WxBillOtherDepositService wxBillOtherDepositService; + @Autowired WxBillDailyMapper wxBillDailyMapper; @@ -75,25 +78,17 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Autowired WxBillOtherMapper wxBillOtherMapper; + @Autowired + WxBillOtherDepositMapper wxBillOtherDepositMapper; @Override public Map listAsPage(WxBillAll record, Integer pageIndex, Integer pageSize) { //更新各账单状态 updateBillStatus(record); - //得到当前月 - String month = DateUtils.getSystemTime("yyyy-MM"); - //获取账单信息-欠缴笔数、欠缴金额、结清笔数、结清金额 - Object billInfo = getBillInfo(record.getTenantId(), month); - //设置查询参数-当前月 - record.setMonth(month); - //分页-页数、条数 PageHelper.startPage(pageIndex, pageSize); - //查询 List> billList = wxBillAllMapper.list(record); PageInfo> pageInfo = new PageInfo<>(billList); - //返回值 Map result = new HashMap<>(); - result.put("billInfo", billInfo); result.put("pageInfo", pageInfo); return result; } @@ -200,9 +195,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { @Override public void exportBill(HttpServletRequest request, HttpServletResponse response, WxBillAll wxBillAll) { //得到当前月 - String month = DateUtils.getSystemTime("yyyy-MM"); + //String month = DateUtils.getSystemTime("yyyy-MM"); //设置查询参数-当前月 - wxBillAll.setMonth(month); + //wxBillAll.setMonth(month); //查询 Map>> billMapList = wxBillAllMapper.list(wxBillAll).parallelStream().collect(Collectors.groupingBy(x -> { return x.get("merchantId"); @@ -229,16 +224,18 @@ public class WxBillAllServiceImpl implements WxBillAllService { Row row = sheet.createRow(0); Cell shopNumberCell = row.createCell(0); Cell merchantNameCell = row.createCell(1); - Cell billNameCell = row.createCell(2); - Cell receivePayCell = row.createCell(3); - Cell payCell = row.createCell(4); - Cell oweCell = row.createCell(5); - Cell receiveDateCell = row.createCell(6); - Cell expiredDayCell = row.createCell(7); - Cell statusCell = row.createCell(8); + Cell shopTypeCell = row.createCell(2); + Cell billNameCell = row.createCell(3); + Cell receivePayCell = row.createCell(4); + Cell payCell = row.createCell(5); + Cell oweCell = row.createCell(6); + Cell receiveDateCell = row.createCell(7); + Cell expiredDayCell = row.createCell(8); + Cell statusCell = row.createCell(9); shopNumberCell.setCellValue("商铺号"); merchantNameCell.setCellValue("商户名称"); + shopTypeCell.setCellValue("商铺类型"); billNameCell.setCellValue("费用类型"); receivePayCell.setCellValue("实际应收金额(元)"); payCell.setCellValue("实收金额(元)"); @@ -251,17 +248,19 @@ public class WxBillAllServiceImpl implements WxBillAllService { row = sheet.createRow(i + 1); shopNumberCell = row.createCell(0); merchantNameCell = row.createCell(1); - billNameCell = row.createCell(2); - receivePayCell = row.createCell(3); - payCell = row.createCell(4); - oweCell = row.createCell(5); - receiveDateCell = row.createCell(6); - expiredDayCell = row.createCell(7); - statusCell = row.createCell(8); + shopTypeCell = row.createCell(2); + billNameCell = row.createCell(3); + receivePayCell = row.createCell(4); + payCell = row.createCell(5); + oweCell = row.createCell(6); + receiveDateCell = row.createCell(7); + expiredDayCell = row.createCell(8); + statusCell = row.createCell(9); Map billMap = billList.get(i); logger.info(billMap.toString()); shopNumberCell.setCellValue(billMap.get("shopNumber").toString()); merchantNameCell.setCellValue(billMap.get("merchantName").toString()); + shopTypeCell.setCellValue(EnumRentShopType.getEnum((Integer) billMap.get("rentShopType")).getMessage()); billNameCell.setCellValue(billMap.get("name").toString()); BigDecimal needPay = new BigDecimal(billMap.get("pay").toString()).divide(new BigDecimal(100)); payCell.setCellValue(needPay.toString()); @@ -272,7 +271,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { String receiveDate = DateUtils.date2String((Date) billMap.get("receiveDate"), "yyyy-MM-dd"); receiveDateCell.setCellValue(receiveDate); expiredDayCell.setCellValue(billMap.get("expiredDay").toString()); - statusCell.setCellValue(EnumBillDailyStatus.getEnum((Integer) billMap.get("status")).getMessage()); + statusCell.setCellValue(EnumBillRentStatus.getEnum((Integer) billMap.get("status")).getMessage()); } row = sheet.createRow(billList.size()+1); Cell managerInfoCell = row.createCell(0); @@ -462,8 +461,11 @@ public class WxBillAllServiceImpl implements WxBillAllService { private void updateBillStatus(WxBillAll record) { logger.info("更新各账单状态开始"); + //更新其他押金账单 + //WxBillOtherDeposit wxBillOtherDeposit = new WxBillOtherDeposit(); + //wxBillOtherDeposit.setTenantId(record.getTenantId()); + //wxBillOtherDepositService.updateBillStatus(wxBillOtherDeposit); //更新其他账单 - // WxBillOther wxBillOther = new WxBillOther(); wxBillOther.setTenantId(record.getTenantId()); wxBillOtherService.updateBillStatus(wxBillOther); @@ -472,13 +474,13 @@ public class WxBillAllServiceImpl implements WxBillAllService { wxBillDaily.setTenantId(record.getTenantId()); wxBillDailyService.updateBillStatus(wxBillDaily); //更新租赁押金账单状态 - WxBillDeposit wxBillDeposit = new WxBillDeposit(); - wxBillDeposit.setTenantId(record.getTenantId()); - wxBillDepositService.updateBillStatus(wxBillDeposit); + //WxBillDeposit wxBillDeposit = new WxBillDeposit(); + //wxBillDeposit.setTenantId(record.getTenantId()); + //wxBillDepositService.updateBillStatus(wxBillDeposit); //更新物业押金账单状态 - WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); - wxBillPropertyDeposit.setTenantId(record.getTenantId()); - wxBillPropertyDepositService.updateBillStatus(wxBillPropertyDeposit); + //WxBillPropertyDeposit wxBillPropertyDeposit = new WxBillPropertyDeposit(); + //wxBillPropertyDeposit.setTenantId(record.getTenantId()); + //wxBillPropertyDepositService.updateBillStatus(wxBillPropertyDeposit); //更新物业账单状态 WxBillProperty wxBillProperty = new WxBillProperty(); wxBillProperty.setTenantId(record.getTenantId()); @@ -490,10 +492,9 @@ public class WxBillAllServiceImpl implements WxBillAllService { logger.info("更新各账单状态结束"); } - private Object getBillInfo(String tenantId, String month) { - WxBillAll record = new WxBillAll(); - record.setTenantId(tenantId); - record.setMonth(month); + @Override + public Object getBillInfo(WxBillAll record) { + record.setRentShopType(EnumRentShopType.SHOP.getCode()); record.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); Map oweInfoForShop = wxBillAllMapper.queryOweInfo(record); @@ -506,7 +507,7 @@ public class WxBillAllServiceImpl implements WxBillAllService { record.setStatus(EnumBillRentStatus.PAID.getCode()); Map paidInfoForPoint = wxBillAllMapper.queryPaidInfo(record); - Map result = new HashMap<>(5); + Map result = new HashMap<>(4); result.put("oweInfoForShop", oweInfoForShop); result.put("paidInfoForShop", paidInfoForShop); result.put("oweInfoForPoint", oweInfoForPoint); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java index 913565844..99a641334 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillDepositServiceImpl.java @@ -37,7 +37,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { @Override public PageInfo> listAsPage(WxBillDeposit record, Integer pageIndex, Integer pageSize) { //更新账单状态 - updateBillStatus(record); + //updateBillStatus(record); PageHelper.startPage(pageIndex, pageSize); List> billDepositList = wxBillDepositMapper.queryBillDepositList(record); PageInfo> pageInfo = new PageInfo<>(billDepositList); @@ -96,7 +96,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ - return new ResultData(ErrorCode.BILL_PAY_ERROR,"实收金额不能大于实际应收金额"); + return new ResultData(ErrorCode.BILL_PAY_ERROR.getCode(), "实收金额不能大于实际应收金额"); } if (record.getId() == null) { logger.info("新增租赁押金账单"); @@ -132,7 +132,7 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { logger.error("更新租赁押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - return new ResultData(Result.SUCCESS, "更新租赁押金账单成功"); + return new ResultData(Result.SUCCESS, "更新租赁押金账单成功", wxBillDeposit); } } @@ -160,10 +160,44 @@ public class WxBillDepositServiceImpl implements WxBillDepositService { } return new ResultData(Result.SUCCESS, "租赁押金结单成功"); } - - - - - - + + @Transactional(rollbackFor = {Exception.class}) + @Override + public ResultData returnDeposit(WxBillDeposit record) { + logger.info("租赁押金退还"); + WxBillDeposit wxBillDeposit = wxBillDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_RENT_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReturnPrice(record.getReturnPrice()); + wxBillDeposit.setStatus(EnumBillRentStatus.RETURN.getCode()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("租赁押金退还失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "租赁押金退还成功", wxBillDeposit); + } + + @Override + public ResultData adjustDeposit(WxBillDeposit record) { + logger.info("租赁押金调整"); + WxBillDeposit wxBillDeposit = wxBillDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_RENT_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReceivePay(record.getReceivePay()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("租赁押金调整失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "租赁押金调整成功", wxBillDeposit); + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java index 3d1680b7e..4246f7492 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillOtherDepositServiceImpl.java @@ -6,7 +6,6 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxBillOther; import com.iformall.domain.po.WxBillOtherDeposit; import com.iformall.domain.po.WxShop; import com.iformall.enums.EnumBillDailyStatus; @@ -40,7 +39,7 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService @Override public PageInfo> listAsPage(WxBillOtherDeposit record, Integer pageIndex, Integer pageSize) { //更新账单状态 - updateBillStatus(record); + //updateBillStatus(record); //分页对象设置页数和条数 PageHelper.startPage(pageIndex, pageSize); //查询 @@ -113,14 +112,14 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if (pay > receivepay) { - return new ResultData(ErrorCode.BILL_PAY_ERROR, "实收金额不能大于实际应收金额"); + return new ResultData(ErrorCode.BILL_PAY_ERROR.getCode(), "实收金额不能大于实际应收金额"); } if (record.getId() == null) { logger.info("新增其他账单"); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); Date date = new Date(); - record.setStatus(record.getReceiveDate().after(date) ? EnumBillDailyStatus.WAIT_PAY.getCode() : EnumBillDailyStatus.NOT_PAID.getCode()); + record.setStatus(EnumBillDailyStatus.WAIT_PAY.getCode()); record.setCreatetime(date); record.setUpdatetime(date); record.setExpiredDay(0L); @@ -181,5 +180,42 @@ public class WxBillOtherDepositServiceImpl implements WxBillOtherDepositService return new ResultData(Result.SUCCESS, "其他押金账单结单成功"); } + @Override + public ResultData returnDeposit(WxBillOtherDeposit record) { + logger.info("其他押金退还"); + WxBillOtherDeposit wxBillDeposit = wxBillOtherDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_OTHER_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReturnPrice(record.getReturnPrice()); + wxBillDeposit.setStatus(EnumBillRentStatus.RETURN.getCode()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("租赁押金退还失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "租赁押金退还成功", wxBillDeposit); + } + + @Override + public ResultData adjustDeposit(WxBillOtherDeposit record) { + logger.info("其他押金调整"); + WxBillOtherDeposit wxBillDeposit = wxBillOtherDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_OTHER_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReceivePay(record.getReceivePay()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillOtherDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("其他押金退还失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "其他押金调整成功", wxBillDeposit); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java index 44a90c296..b724252d2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyDepositServiceImpl.java @@ -37,7 +37,7 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe @Override public PageInfo> listAsPage(WxBillPropertyDeposit record, Integer pageIndex, Integer pageSize) { //更新账单状态 - updateBillStatus(record); + //updateBillStatus(record); PageHelper.startPage(pageIndex, pageSize); List> billDepositList = wxBillPropertyDepositMapper.queryBillDepositList(record); PageInfo> pageInfo = new PageInfo<>(billDepositList); @@ -97,7 +97,7 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe int receivepay = record.getReceivePay().intValue(); int pay = record.getPay().intValue(); if(pay>receivepay){ - return new ResultData(ErrorCode.BILL_PAY_ERROR,"实收金额不能大于实际应收金额"); + return new ResultData(ErrorCode.BILL_PAY_ERROR.getCode(), "实收金额不能大于实际应收金额"); } if (record.getId() == null) { logger.info("新增物业押金账单"); @@ -133,7 +133,7 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe logger.error("更新物业押金账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - return new ResultData(Result.SUCCESS, "更新物业押金账单成功"); + return new ResultData(Result.SUCCESS, "更新物业押金账单成功", wxBillDeposit); } } @@ -161,10 +161,44 @@ public class WxBillPropertyDepositServiceImpl implements WxBillPropertyDepositSe } return new ResultData(Result.SUCCESS, "物业押金结单成功"); } - - - - - - + + @Override + public ResultData returnDeposit(WxBillPropertyDeposit record) { + logger.info("物业押金退还"); + WxBillPropertyDeposit wxBillDeposit = wxBillPropertyDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_PROPERTY_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReturnPrice(record.getReturnPrice()); + wxBillDeposit.setStatus(EnumBillRentStatus.RETURN.getCode()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("物业押金退还失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "物业押金退还成功", wxBillDeposit); + } + + + @Override + public ResultData adjustDeposit(WxBillPropertyDeposit record) { + logger.info("物业押金调整"); + WxBillPropertyDeposit wxBillDeposit = wxBillPropertyDepositMapper.selectByPrimaryKey(record.getId()); + if (wxBillDeposit == null) { + return new ResultData(ErrorCode.BILL_OTHER_DEPOSIT_IS_NOT_FOUND); + } + wxBillDeposit.setReceivePay(record.getReceivePay()); + wxBillDeposit.setUpdatetime(new Date()); + try { + wxBillPropertyDepositMapper.updateByPrimaryKeySelective(wxBillDeposit); + } catch (Exception e) { + logger.error("物业押金退还失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "物业押金调整成功", wxBillDeposit); + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java index 129f65d2d..a17c921bf 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillPropertyServiceImpl.java @@ -7,9 +7,11 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxBillProperty; +import com.iformall.domain.po.WxBillPropertyDeposit; import com.iformall.enums.EnumBillRentStatus; import com.iformall.enums.EnumDelStatus; import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxBillPropertyDepositMapper; import com.iformall.mapper.WxBillPropertyMapper; import com.iformall.service.WxBillPropertyService; import org.slf4j.Logger; @@ -33,6 +35,9 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { @Autowired WxBillPropertyMapper wxBillPropertyMapper; + @Autowired + WxBillPropertyDepositMapper wxBillPropertyDepositMapper; + @Override public PageInfo> listAsPage(WxBillProperty record, Integer pageIndex, Integer pageSize) { //更新账单状态 @@ -119,6 +124,9 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { if(property==null){ return new ResultData(ErrorCode.BILL_PROPERTY_IS_NOT_FOUND); } + property.setRevenue(record.getRevenue()); + property.setLatePayRatio(record.getLatePayRatio()); + property.setLatePayTime(record.getLatePayTime()); property.setPayDate(record.getPayDate()); property.setPay(record.getPay()); property.setReceivePay(record.getReceivePay()); @@ -131,7 +139,7 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { logger.error("更新物业账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - return new ResultData(Result.SUCCESS, "更新物业账单成功"); + return new ResultData(Result.SUCCESS, "更新物业账单成功", property); } } @@ -141,12 +149,19 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { } @Override - public Object findByMerchantId(Long id) { + public PageInfo> findByPropertyContractId(Long id, String tenantId, Integer pageIndex, Integer pageSize) { WxBillProperty record = new WxBillProperty(); - record.setMerchantId(id); - return wxBillPropertyMapper.queryBillPropertyList(record); + record.setPropertyContractId(id); + record.setTenantId(tenantId); + record.setSortColumns(WxBillProperty.Field.Id_ASC); + updateBillStatus(record); + PageHelper.startPage(pageIndex, pageSize); + List> billRentList = wxBillPropertyMapper.queryBillPropertyList(record); + PageInfo> pageInfo = new PageInfo<>(billRentList); + return pageInfo; } + @Transactional(rollbackFor = {Exception.class}) @Override public ResultData updatePaid(Long id) { @@ -167,8 +182,23 @@ public class WxBillPropertyServiceImpl implements WxBillPropertyService { return new ResultData(Result.SUCCESS, "结单成功"); } - - - - + @Override + public Object detail(Long id) { + //物业 + Map property = getById(id); + //押金 + WxBillPropertyDeposit depositParam = new WxBillPropertyDeposit(); + depositParam.setPropertyContractId((Long) property.get("propertyContractId")); + Map deposit = null; + List> billDepositList = wxBillPropertyDepositMapper.queryBillDepositList(depositParam); + if (!billDepositList.isEmpty()) { + deposit = billDepositList.get(0); + } + Map result = new HashMap<>(2); + result.put("property", property); + result.put("deposit", deposit); + return result; + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java index 0b2274ba0..ef47db601 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBillRentServiceImpl.java @@ -6,10 +6,12 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxBillDeposit; import com.iformall.domain.po.WxBillRent; import com.iformall.enums.EnumBillRentStatus; import com.iformall.enums.EnumDelStatus; import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxBillDepositMapper; import com.iformall.mapper.WxBillRentMapper; import com.iformall.service.WxBillRentService; import org.slf4j.Logger; @@ -33,6 +35,8 @@ public class WxBillRentServiceImpl implements WxBillRentService { @Autowired WxBillRentMapper wxBillRentMapper; + @Autowired + WxBillDepositMapper wxBillDepositMapper; @Override public PageInfo> listAsPage(WxBillRent record, Integer pageIndex, Integer pageSize) { @@ -120,6 +124,9 @@ public class WxBillRentServiceImpl implements WxBillRentService { if(wxBillRent==null){ return new ResultData(ErrorCode.BILL_RENT_IS_NOT_FOUND); } + wxBillRent.setRevenue(record.getRevenue()); + wxBillRent.setLatePayRatio(record.getLatePayRatio()); + wxBillRent.setLatePayTime(record.getLatePayTime()); wxBillRent.setPayDate(record.getPayDate()); wxBillRent.setPay(record.getPay()); wxBillRent.setReceivePay(record.getReceivePay()); @@ -142,10 +149,16 @@ public class WxBillRentServiceImpl implements WxBillRentService { } @Override - public Object findByMerchantId(Long id) { + public PageInfo> findByRentContractId(Long id, String tenantId, Integer pageIndex, Integer pageSize) { WxBillRent record = new WxBillRent(); - record.setMerchantId(id); - return wxBillRentMapper.queryBillRentList(record); + record.setRentContractId(id); + record.setTenantId(tenantId); + record.setSortColumns(WxBillRent.Field.Id_ASC); + updateBillStatus(record); + PageHelper.startPage(pageIndex, pageSize); + List> billRentList = wxBillRentMapper.queryBillRentList(record); + PageInfo> pageInfo = new PageInfo<>(billRentList); + return pageInfo; } @Transactional(rollbackFor = {Exception.class}) @@ -168,4 +181,37 @@ public class WxBillRentServiceImpl implements WxBillRentService { return new ResultData(Result.SUCCESS, "租赁账单结单成功"); } + @Override + public Object detail(Long id) { + //租赁 + Map rent = getById(id); + //押金 + WxBillDeposit depositParam = new WxBillDeposit(); + depositParam.setRentContractId((Long) rent.get("rentContractId")); + Map deposit = null; + List> billDepositList = wxBillDepositMapper.queryBillDepositList(depositParam); + if (!billDepositList.isEmpty()) { + deposit = billDepositList.get(0); + } + //周期 + Map result = new HashMap<>(3); + result.put("rent", rent); + result.put("deposit", deposit); + return result; + } + + @Override + public ResultData updateRevenue(WxBillRent record) { + WxBillRent wxBillRent = wxBillRentMapper.selectByPrimaryKey(record.getId()); + wxBillRent.setRevenue(record.getRevenue()); + wxBillRent.setUpdatetime(new Date()); + try { + wxBillRentMapper.updateByPrimaryKeySelective(wxBillRent); + } catch (Exception e) { + logger.error("修改营业额失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + return new ResultData(Result.SUCCESS, "修改营业额成功"); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBrandServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBrandServiceImpl.java index 657c92551..fe457ad52 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBrandServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBrandServiceImpl.java @@ -74,7 +74,7 @@ public class WxBrandServiceImpl implements WxBrandService { } try { wxBrand.setUpdatetime(new Date()); - wxBrandMapper.updateByPrimaryKey(wxBrand); + wxBrandMapper.updateByPrimaryKeySelective(wxBrand); return new ResultData(Result.SUCCESS, "操作成功"); } catch (Exception e) { logger.error("更新租赁合同信息失败,e:" + e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index fc69aee85..a39d613fb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -19,6 +19,7 @@ import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxScoreRulesService; import com.iformall.utils.Constant; +import com.iformall.utils.DownFileUtil; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; @@ -267,43 +268,13 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { workbook.write(fileOut); fileOut.close(); workbook.close(); - downFile(filepath, filename,"会员信息数据.xlsx",response, request); + DownFileUtil.downFile(filepath,"会员信息数据.xlsx",response, request); FileUtils.forceDelete(file); } catch (Exception e) { e.printStackTrace(); } } - public void downFile(String filePath, String filename,String exportFileName, HttpServletResponse response, - HttpServletRequest req) throws IOException { - try { - response.reset(); - response.setContentType("bin"); - String agent = req.getHeader("user-agent"); - if (agent.contains("Firefox")) { - response.setHeader("Content-disposition", - "attachment; filename=" - + new String(exportFileName.getBytes("GB2312"), - "ISO-8859-1")); - } else { - response - .setHeader("Content-disposition", - "attachment; filename=" - + java.net.URLEncoder.encode(exportFileName, - "UTF-8")); - } - // 循环取出流中的数据 - byte[] b = new byte[1024]; - int len; - InputStream inStream = new FileInputStream(filePath); - while ((len = inStream.read(b)) > 0) - response.getOutputStream().write(b, 0, len); - inStream.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - @Override public void exportTemplate(HttpServletRequest request, HttpServletResponse response, String tenantId) { @@ -424,7 +395,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { workbook.write(fileOut); fileOut.close(); workbook.close(); - downFile(filepath, filename, "会员信息模板.xlsx",response, request); + DownFileUtil.downFile(filepath, "会员信息模板.xlsx",response, request); FileUtils.forceDelete(file); } catch (Exception e) { logger.error("导出模板:" + e.getMessage()); @@ -699,7 +670,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { fileOut.close(); workbook.close(); String name = (record.getIsPay()!=null && 1==record.getIsPay())?"线上缴费车辆数据":"进出车辆数据"; - downFile(filepath, filename,name+".xlsx",response, request); + DownFileUtil.downFile(filepath,name+".xlsx",response, request); FileUtils.forceDelete(file); } catch (Exception e) { e.printStackTrace(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index 789ccc1e8..106a46651 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -5,7 +5,6 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxScoreHistory; import com.iformall.enums.EnumScoreType; import com.iformall.mapper.WxCUserMapper; import com.iformall.mapper.WxCouponOrderMapper; @@ -16,11 +15,13 @@ import com.iformall.service.WxScoreRulesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.concurrent.TimeUnit; @Service public class WxCUserServiceImpl implements WxCUserService { @@ -42,6 +43,11 @@ public class WxCUserServiceImpl implements WxCUserService { WxScoreHistoryMapper wxScoreHistoryMapper; + @Autowired + @Qualifier("cuserTokenRedisTemplate") + RedisTemplate cUserTokenRedisTemplate; + + @Override public PageInfo listAsPage(WxCUser record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.findList(record)); @@ -59,7 +65,22 @@ public class WxCUserServiceImpl implements WxCUserService { @Override public WxCUser getByToken(String token) { - return wxCUserMapper.findByToken(token); + logger.info("获取用户信息start ..."); + String key = "token_" + token; + ValueOperations operations = cUserTokenRedisTemplate.opsForValue(); + + // 缓存 + boolean hasKey = cUserTokenRedisTemplate.hasKey(key); + if(hasKey) { + // 从缓存获取用户信息 + WxCUser user = operations.get(key); + return user; + } + WxCUser user = wxCUserMapper.findByToken(token); + // 插入缓存 + operations.set(key, user, 3600, TimeUnit.SECONDS); + + return user; } @Override @@ -75,10 +96,16 @@ public class WxCUserServiceImpl implements WxCUserService { user.setUpdateDate(curr); ret = wxCUserMapper.insertSelective(user); } else { - user.setLoginCount(user.getLoginCount() + 1); user.setUpdateDate(curr); ret = wxCUserMapper.updateByPrimaryKeySelective(user); } + String key = "token_" + user.getToken(); + // 缓存已存在,删除 + boolean hasKey = cUserTokenRedisTemplate.hasKey(key); + if(hasKey) { + cUserTokenRedisTemplate.delete(key); + logger.info("更新用户,从缓存中删除用户 token >> " + user.getToken()); + } return ret; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayRecordServiceImpl.java index 046ce7538..bc3562f15 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCarPayRecordServiceImpl.java @@ -2,6 +2,7 @@ package com.iformall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; import com.iformall.domain.po.WxCarPayRecord; import com.iformall.mapper.WxCarPayRecordMapper; import com.iformall.service.WxCarPayRecordService; @@ -25,6 +26,8 @@ public class WxCarPayRecordServiceImpl implements WxCarPayRecordService{ @Override public void saveOrUpdate(WxCarPayRecord record) { if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); wxCarPayRecordMapper.insertSelective(record); } else { wxCarPayRecordMapper.updateByPrimaryKeySelective(record); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index c157a56c2..c3ac2869f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -10,6 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.common.IdWorker; +import java.util.List; + @Service public class WxCardInfoServiceImpl implements WxCardInfoService { @@ -43,12 +45,4 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { public void deleteById(Long id) { wxCardInfoMapper.deleteByPrimaryKey(id); } - - - - - - - - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index b033183ca..01e8ebdf4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -168,7 +168,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { cardInfo.setRemainingShareFeeAmount(remain_real_pament); cardInfo.setUpdateDate(curDate); try { - wxCardInfoMapper.updateByPrimaryKey(cardInfo); + wxCardInfoMapper.updateByPrimaryKeySelective(cardInfo); } catch (Exception e) { logger.error("card info update error"); return new ResultData(ErrorCode.DB_FAIL.getCode(), "card info 更新出错!"); @@ -233,7 +233,13 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } } - + //10、消费后修改卡转赠状态 + WxCardInfo wxCardInfo = new WxCardInfo(); + wxCardInfo.setId(record.getCardId()); + wxCardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode()); + if (cardInfo.getSupportTransfer().equals(EnumCouponTransfer.YES.getCode())) { + wxCardInfoMapper.updateByPrimaryKeySelective(wxCardInfo); + } return new ResultData(record); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java new file mode 100644 index 000000000..0dd05115d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java @@ -0,0 +1,1775 @@ +package com.iformall.service.impl; + +import com.alibaba.fastjson.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.dto.WxCUserBasicInfoDto; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.*; +import com.iformall.enums.*; +import com.iformall.mapper.*; +import com.iformall.service.WxChartDataService; +import com.iformall.service.WxCouponService; +import com.iformall.utils.DateUtils; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class WxChartServiceImpl implements WxChartDataService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxShopMapper wxShopMapper; + @Autowired + WxBillRentMapper wxBillRentMapper; + @Autowired + WxMerchantMapper wxMerchantMapper; + @Autowired + WxMerchantTradeDailyMapper wxMerchantTradeDailyMapper; + @Autowired + WxCarCmdLogMapper wxCarCmdLogMapper; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxUserVisitMapper wxUserVisitMapper; + @Autowired + WxCUserCarMapper wxCUserCarMapper; + @Autowired + WxCouponActionLogMapper wxCouponActionLogMapper; + @Autowired + WxCUserMapper wxCUserMapper; + @Autowired + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Autowired + WxUserChannelMapper wxUserChannelMapper; + @Autowired + WxLevelConfigMapper wxLevelConfigMapper; + @Autowired + WxCUserTagsMapper wxCUserTagsMapper; + @Autowired + WxCouponService wxCouponService; + @Autowired + WxOrderGroupMapper wxOrderGroupMapper; + + @Override + public ResultData queryData(Map paramsMap) { + String tenantId = paramsMap.get("tenantId"); + Integer chart = Integer.valueOf(paramsMap.get("chart")); + String startdate = paramsMap.get("startdate") + " 00:00:00"; + String enddate = paramsMap.get("enddate") + " 23:59:59"; + + if (StringUtils.isEmpty(startdate)) { + startdate = DateUtils.getSystemTime("yyyy-MM-dd") + " 00:00:00" ; + } + if(StringUtils.isBlank(enddate)){ + enddate = DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59"; + } + + //出租率 + HashMap datamap = new HashMap<>(); + if (chart.equals(EnumChart.CZL.getCode())) { + WxShop wxShop = new WxShop(); + wxShop.setTenantId(tenantId); + wxShop.setStatus(EnumShopStatus.RENT.getCode()); + List yczlist = wxShopMapper.findList(wxShop); + wxShop.setStatus(EnumShopStatus.NOT_RENT.getCode()); + List wczlist = wxShopMapper.findList(wxShop); + //出租与未出租 + int yczsize = yczlist.size(); + int wczsize = wczlist.size(); + int size = yczsize + wczsize; + if (size == 0) { + datamap.put("yczsl", 0); + datamap.put("wczsl", 0); + datamap.put("yczl", 0); + datamap.put("wczl", 0); + } else { + datamap.put("yczsl", yczsize); + datamap.put("wczsl", wczsize); + double yczld = ((double) yczsize / size) * 100; + double dczl = new BigDecimal(yczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + double wczld = ((double) wczsize / size) * 100; + double wczl = new BigDecimal(wczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yczl", dczl); + datamap.put("wczl", wczl); + } + return new ResultData(datamap); + } + //租金收缴率 + if (chart.equals(EnumChart.ZJSJL.getCode())) { + //租金 + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", enddate + " 23:59:59"); + Map payinfo = wxBillRentMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("ysje", receivepay); + datamap.put("ssje", pay); + datamap.put("zjsjl", zjcjl); + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } + return new ResultData(datamap); + } + //昨日报单率 + if (chart.equals(EnumChart.ZRBDL.getCode())) { + WxMerchant wxMerchant = new WxMerchant(); + wxMerchant.setTenantId(tenantId); + wxMerchant.setStatus(1); + List merchants = wxMerchantMapper.findList(wxMerchant); + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + String reportdate = DateUtils.getTimeBefore(1, new Date()); + wxMerchantTradeDaily.setReportDate(reportdate); + List tradelist = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); + int merchantsize = merchants.size(); + int tradesize = tradelist.size(); + if (merchantsize > 0 && tradesize > 0) { + double shsbld = ((double) tradesize / merchantsize) * 100; + double shsbl = new BigDecimal(shsbld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("shsbl", shsbl); + } else { + datamap.put("shsbl", 0); + } + int shsbjg = tradelist.stream().mapToInt(WxMerchantTradeDaily::getTradeAmt).sum(); + datamap.put("shsbjg", shsbjg); + return new ResultData(datamap); + } + //车流数据 + if (chart.equals(EnumChart.CLSJ.getCode())) { + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + startdate = DateUtils.getTimeBefore(30, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + + List> historylist = wxCarCmdLogMapper.queryHistory(params); + + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + + Map historymap = new LinkedHashMap<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + if (o == null) { + historymap.put(date.substring(5).replace("-", "/"), 0L); + } else { + historymap.put(date.substring(5).replace("-", "/"), o); + } + } + datamap.put("history", historymap); + return new ResultData(datamap); + } + //券交易数据 + if (chart.equals(EnumChart.QJYSJ.getCode())) { + //couponData + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List couponDatalist = wxCouponOrderMapper.couponDataMap(params); + //查询券领取人数 + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List couponTempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = couponDatalist.stream().filter(c -> c.getCreateTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + MarkingCouponDataReportVo markingCouponDataReportVo = new MarkingCouponDataReportVo(); + markingCouponDataReportVo.setCreateTime(tj); + markingCouponDataReportVo.setCouponCount(0); + markingCouponDataReportVo.setCouponUserCount(0); + markingCouponDataReportVo.setVerifyCount(0); + markingCouponDataReportVo.setVerifyUserCount(0); + couponTempDatalist.add(markingCouponDataReportVo); + continue; + } + couponTempDatalist.add(first.get()); + } + datamap.put("couponDataMap", couponTempDatalist); + return new ResultData(datamap); + } + //活跃用户数据 + if (chart.equals(EnumChart.HYYHSJ.getCode())) { + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } + //销售数据 + if (chart.equals(EnumChart.XSSJ.getCode())) { + Calendar c = Calendar.getInstance(); + Date sTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + List monthVos = new ArrayList<>();//周消费金额 + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(sTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (datamap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } + //解单数据 + if (chart.equals(EnumChart.JDSJ.getCode())) { + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + + List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); + Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDaily::getReportDate, r -> r)); + + List tradeList = new ArrayList<>(); + Calendar cal = Calendar.getInstance(); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat fmtv = new SimpleDateFormat("MM/dd"); + cal.setTime(new Date()); + for (int i = 0; i < 30; i++) { + cal.add(Calendar.DAY_OF_YEAR, -1); + WxMerchantTradeDaily trade = recordMap.get(fmt.format(cal.getTime())); + if (trade != null) { + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); + } else { + trade = new WxMerchantTradeDaily(); + trade.setTradeAmt(0); + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); + } + } + Collections.reverse(tradeList); + return new ResultData(tradeList); + } + //今日场内车流量 + if (chart.equals(EnumChart.JRCNCLL.getCode())) { + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + startdate = DateUtils.getTimeBefore(7, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + List> historylist = wxCarCmdLogMapper.queryHistory(params); + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + Map historymap = new LinkedHashMap<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + if (o == null) { + historymap.put(date.substring(5).replace("-", "/"), 0L); + } else { + historymap.put(date.substring(5).replace("-", "/"), o); + } + } + datamap.put("history", historymap); + //今日车流量 + long todaycar = (long) historymap.get(DateUtils.getSystemTime("MM/dd")); + datamap.put("todaycar", todaycar); + //环比 + String yesterday = DateUtils.getTimeBefore(1, new Date()); + long yesterdaycar = (long) historymap.get(yesterday.substring(5).replace("-", "/")); + if (yesterdaycar > 0) { + double hbd = (double) (todaycar - yesterdaycar) / yesterdaycar * 100; + double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("hb", hb + "%"); + } else { + datamap.put("hb", "--"); + } + //上周同期 + String lastweek = DateUtils.getTimeBefore(7, new Date()); + long last = (long) historymap.get(lastweek.substring(5).replace("-", "/")); + if (last > 0) { + double lasthbd = (double) (todaycar - last) / last * 100; + double lasthb = new BigDecimal(lasthbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lasthb", lasthb + "%"); + } else { + datamap.put("lasthb", "--"); + } + return new ResultData(datamap); + + } + //今日已绑车牌量 + if (chart.equals(EnumChart.JRYBCPL.getCode())) { + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + //绑定车牌 + Map carParams = new HashMap<>(); + carParams.put("tenantId", tenantId); + carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); + carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", yesterday + " 00:00:00"); + carParams.put("enddate", yesterday + " 23:59:59"); + long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", lastweek + " 00:00:00"); + carParams.put("enddate", lastweek + " 23:59:59"); + long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); + datamap.put("todaybindcar", todaybindcar); + if (yesterdaybindcar > 0) { + double yesterdaybinddhb = (double) (todaybindcar - yesterdaybindcar) / yesterdaybindcar * 100; + double yesterdaybindhb = new BigDecimal(yesterdaybinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yesterdaybindhb", yesterdaybindhb + "%"); + } else { + datamap.put("yesterdaybindhb", "--"); + } + if (lastweekbindcar > 0) { + double lastweekbinddhb = (double) (todaybindcar - lastweekbindcar) / lastweekbindcar * 100; + double lastweekbindhb = new BigDecimal(lastweekbinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lastweekbindhb", lastweekbindhb + "%"); + } else { + datamap.put("lastweekbindhb", "--"); + } + return new ResultData(datamap); + } + //实时车流量 + if (chart.equals(EnumChart.SSCLL.getCode())) { + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + params.put("startdate", systemTime + " 05:00:00"); + params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + List> todayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map todaycollect = todayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.HOUR_OF_DAY, 1); + int hour = instance.get(Calendar.HOUR_OF_DAY); + TreeMap hourMap = new TreeMap<>(); + int startHour = 6; + int endHour = 24; + for (int i = startHour; i < endHour; i++) { + if (i <= hour) { + hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", 0); + } else { + hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", ""); + } + } + hourMap.putAll(todaycollect); + datamap.put("todaycardata", hourMap); + params.put("startdate", yesterday + " 05:00:00"); + params.put("enddate", yesterday + " 22:59:59"); + List> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map yesterdaycollect = yesterdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + TreeMap yesterdaytreemap = getTimeTreeMap(); + yesterdaytreemap.putAll(yesterdaycollect); + + datamap.put("yesterdaycardata", yesterdaytreemap); + + params.put("startdate", lastweek + " 05:00:00"); + params.put("enddate", lastweek + " 22:59:59"); + List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map lastdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + TreeMap lastdaytreemap = getTimeTreeMap(); + lastdaytreemap.putAll(lastdaycollect); + datamap.put("lastdaycardata", lastdaytreemap); + + return new ResultData(datamap); + + } + //历史车流量 + if (chart.equals(EnumChart.LSCLL.getCode())) { + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); + startdate = DateUtils.getTimeBefore(30, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + + List> historylist = wxCarCmdLogMapper.queryHistory(params); + + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + + Map historymap = new LinkedHashMap<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + if (o == null) { + historymap.put(date.substring(5).replace("-", "/"), 0L); + } else { + historymap.put(date.substring(5).replace("-", "/"), o); + } + } + datamap.put("history", historymap); + return new ResultData(datamap); + + } + //近一周新增停车会员 + if (chart.equals(EnumChart.JYZXXZTCHY.getCode())) { + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + try { + wxCUserBasicInfoDto.setStartTime(sdf.parse(oneWeekStartdate)); + wxCUserBasicInfoDto.setEndTime(sdf.parse(oneWeekEndDate)); + } catch (Exception e) { + e.printStackTrace(); + } + datamap.put("oneWeekNewCarUserCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + //停车会员总数 + wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + datamap.put("newCarUserSumCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + + return new ResultData(datamap); + } + //近一周线上缴费车辆 + if (chart.equals(EnumChart.JYZXSJFCL.getCode())) { + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + datamap.put("oneWeekCarPayCount", wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); + return new ResultData(datamap); + } + //近一周线上缴费金额 + if (chart.equals(EnumChart.JYZXSJFJE.getCode())) { + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); + Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("fee"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + + TreeMap weekMap = new TreeMap<>(); + for (String date : days) { + weekMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); + } + for (String key : weekCollect.keySet()) { + weekMap.put(key, weekCollect.get(key)); + } + datamap.put("oneWeekCarPayFeeCount", weekMap); + return new ResultData(datamap); + } + //近一周新增会员数 + if (chart.equals(EnumChart.JYZXZHYS.getCode())) { + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); + Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("count"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + TreeMap weekCarMap = new TreeMap<>(); + for (String date : days) { + weekCarMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); + } + for (String key : weekCarCollect.keySet()) { + weekCarMap.put(key, weekCarCollect.get(key)); + } + datamap.put("oneWeekNewCarUserHistory", weekCarMap); + } + //昨日触达用户 + if (chart.equals(EnumChart.ZRCDYH.getCode())) { + //查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-1)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + if (!wxUserVisitList.isEmpty()) { + touchUsersReportVo = wxUserVisitList.get(0); + } else { + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(DateUtils.getSystemTime("MM/dd")); + } + datamap.put("yesterday", touchUsersReportVo); + return new ResultData(datamap); + } + //今日券交易数据 + if (chart.equals(EnumChart.JRQJYSJ.getCode())) { + //今日领取券数 + //查询coupon order表 + int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); + int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); + int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String couponUpDay = "--"; + if (yesterdayCount != 0) { + couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount); + } + String couponUpWeek = "--"; + if (lastWeekCount != 0) { + couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("couponUpDay", couponUpDay);//比昨日提升 + datamap.put("couponUpWeek", couponUpWeek);//比上周提升 + datamap.put("todayCouponCount", todayCouponCount);//今日领取数 + return new ResultData(datamap); + } + //今日场景营销 + if (chart.equals(EnumChart.JRCJYX.getCode())) { + int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); + int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); + int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String sceneDownDay = "--"; + if (yesterdayCount != 0) { + sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount); + } + String sceneUpWeek = "--"; + if (lastWeekCount != 0) { + sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("sceneDownDay", sceneDownDay);//比昨日下降 + datamap.put("sceneUpWeek", sceneUpWeek);//比上周提升 + datamap.put("todaySceneCount", todaySceneCount);//今日领取数 + return new ResultData(datamap); + } + //触达用户数 + if (chart.equals(EnumChart.CDYHS.getCode())) { + //查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = wxUserVisitList.stream().filter(c -> c.getxTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(tj); + tempDatalist.add(touchUsersReportVo); + continue; + } + tempDatalist.add(first.get()); + } + return new ResultData(tempDatalist); + } + //场景营销数据 + if (chart.equals(EnumChart.CJYXSJ.getCode())) { + + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + //停车发券数 停车发券被核销数 核销发券数 核销发券被核销数 + List list = wxCouponActionLogMapper.sceneDataMap(params); + + //停车发券被核销数 + HashMap params1 = new HashMap<>(); + params1.put("tenantId", tenantId); + params1.put("startTime", addDay(-30)); + params1.put("endTime", addDay(1)); + params1.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode());//停车 + List list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1); + Map parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + //核销发券被核销数 + HashMap params2 = new HashMap<>(); + params2.put("tenantId", tenantId); + params2.put("startTime", addDay(-30)); + params2.put("endTime", addDay(1)); + params2.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode());//核销 + List list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2); + Map verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // B端刷卡支付被核销数 + HashMap params3 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode());//B端刷卡支付 + List list3 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params3); + Map microPayCountMap = list3.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // 购买发券被核销数 + HashMap params4 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.C_ORDER.getCode());//买券 + List list4 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params4); + Map OrderCountMap = list4.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + for (MarkingSceneDataReportVo vo : list) { + vo.setParkCount(parkCountMap.get(vo.getXTime()) == null ? 0 : parkCountMap.get(vo.getXTime())); + vo.setVerifyCount(verifyCountMap.get(vo.getXTime()) == null ? 0 : verifyCountMap.get(vo.getXTime())); + vo.setMicroPayCount(microPayCountMap.get(vo.getXTime()) == null ? 0 : microPayCountMap.get(vo.getXTime())); + vo.setOrderCount(OrderCountMap.get(vo.getXTime()) == null ? 0 : OrderCountMap.get(vo.getXTime())); + } + + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + + for (String tj : tjList) { + Optional first = list.stream().filter(c -> c.getXTime().equals(tj)).findFirst(); + + MarkingSceneDataReportVo msdVo; + if (!first.isPresent()) { + msdVo = new MarkingSceneDataReportVo(); + msdVo.setXTime(tj); + msdVo.setCarCount(0); + msdVo.setParkCount(0); + msdVo.setVerifyCount(0); + msdVo.setMicroPayCount(0); + msdVo.setOrderCount(0); + msdVo.setTempCount(0); + msdVo.setParkSendCount(0); + msdVo.setVerifySendCount(0); + msdVo.setMicroPaySendCount(0); + msdVo.setOrderSendCount(0); + msdVo.setTotal(0); + } else { + msdVo = first.get(); + msdVo.setTotal(msdVo.getParkSendCount() + + msdVo.getVerifySendCount() + + msdVo.getMicroPaySendCount() + + msdVo.getOrderSendCount()); + } + tempDatalist.add(msdVo); + } + datamap.put("sceneDataMap", tempDatalist); + return new ResultData(datamap); + } + //新增用户 + if (chart.equals(EnumChart.XZYH.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserMapper.findCount(dto);//总数 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -1); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long todayCount = wxCUserMapper.findCount(dto); + datamap.put("allCount", allCount);//会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } + //活跃用户 + if (chart.equals(EnumChart.HYYH.getCode())) { + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + List collect = list.parallelStream().filter(x -> x.getxTime().equals(yesterday)).collect(Collectors.toList()); + int yesterdayCount = 0; + if (!collect.isEmpty()) { + yesterdayCount = collect.get(0).getUv(); + } + Integer thisMonthCount = list.parallelStream().collect(Collectors.summingInt(u -> u.getUv())); + datamap.put("yesterdayCount", yesterdayCount);//昨日活跃数 + datamap.put("thisMonthCount", thisMonthCount);//近一个月活跃数 + return new ResultData(datamap); + } + //线上交易 + if (chart.equals(EnumChart.XSJY.getCode())) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + int thisMonthCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 + c.clear(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + startTime = c.getTime(); + int todayCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 + DecimalFormat df = new DecimalFormat("0.00"); + datamap.put("todayCount", df.format((float) todayCount / 100));//今日消费金额 + String thisMonthCountStr = df.format((float) thisMonthCount / 100); + datamap.put("thisMonthCount", thisMonthCountStr);//近一个月消费金额数 + return new ResultData(datamap); + } + //近一周新增用户数 + if (chart.equals(EnumChart.JYZXZYHS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List weekVos = new ArrayList<>();//周会员数 + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setSortNum(sortNum++); + vo.setCount(count); + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//月用户增加数列表 + return new ResultData(datamap); + + } + //近一周活跃用户数 + if (chart.equals(EnumChart.JYZHYYHS.getCode())) { + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List weekVos = new ArrayList<>();//每周uv + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//周活跃数列表 + return new ResultData(datamap); + + } + //近一周线上交易金额(元) + if (chart.equals(EnumChart.JYZXSJYJE.getCode())) { + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + c.clear(); + c.setTime(endTime); + Date eTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List weekVos = new ArrayList<>();//周消费金额 + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//一周金额列表 + return new ResultData(datamap); + } + //新增用户趋势 + if (chart.equals(EnumChart.XZYHQS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List monthVos = new ArrayList<>();//会员数 + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setSortNum(sortNum++); + vo.setCount(count); + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//月用户增加数列表 + return new ResultData(datamap); + } + //活跃用户趋势 + if (chart.equals(EnumChart.HYYHQS.getCode())) { + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } + //线上交易趋势 + if (chart.equals(EnumChart.XSJYQS.getCode())) { + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List monthVos = new ArrayList<>(); + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); + } + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } + //微信用户总数 + if (chart.equals(EnumChart.WXYHZS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + //微信用户数据 + long wxallCount = wxCUserMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long wxtodayCount = wxCUserMapper.findCount(dto);//今天新增 + datamap.put("wxallCount", wxallCount);//累计会员总数 + datamap.put("wxtodayCount", wxtodayCount);//今日新增会员数 + return new ResultData(datamap); + } + //会员总数 + if (chart.equals(EnumChart.HYZS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserBasicInfoMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long todayCount = wxCUserBasicInfoMapper.findCount(dto);//今天新增 + datamap.put("allCount", allCount);//累计会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } + //微信用户累计趋势 + if (chart.equals(EnumChart.WXYHLJQS.getCode())) { + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + List wxallCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : wxnewCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + wxallCountVos.add(vo); + i++; + } + datamap.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + } + //会员累计趋势 + if (chart.equals(EnumChart.HYLJQS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + List allCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserBasicInfoMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : newCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + allCountVos.add(vo); + i++; + } + datamap.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + + } + //微信用户新增趋势 + if (chart.equals(EnumChart.WXYHXZQS.getCode())) { + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + datamap.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } + //会员新增趋势 + if (chart.equals(EnumChart.HYXZQS.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + datamap.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } + //拓客渠道 + if (chart.equals(EnumChart.TKQD.getCode())) { + List channelStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + List sceneList = new ArrayList<>(); + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + sceneList.add(uc.getSceneAddress()); + } + wxCUser.setSceneList(sceneList); + WxUserChannel channelStructure = new WxUserChannel(); + channelStructure.setChannelName(w.getChannelName()); + channelStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + channelStructureList.add(channelStructure); + } + } + datamap.put("channelList", channelStructureList); + return new ResultData(datamap); + } + //场景排名 + if (chart.equals(EnumChart.CJPM.getCode())) { + List senceStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + WxUserChannel senceStructure = new WxUserChannel(); + senceStructure.setDescription(uc.getDescription()); + senceStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + senceStructureList.add(senceStructure); + } + } + } + Collections.sort(senceStructureList, (s1, s2) -> ((int) (s2.getCount() - s1.getCount()))); + datamap.put("senceList", senceStructureList.subList(0, 10)); + return new ResultData(datamap); + } + //会员性别比例 + if (chart.equals(EnumChart.HYXBBL.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + } + //会员绑定车牌率 + if (chart.equals(EnumChart.HYBDCPL.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long total = wxCUserBasicInfoMapper.findCount(dto); + long userCountWithCar = wxCUserCarMapper.countUser(dto); + Map userWithCar = new HashMap(); + userWithCar.put("title", "已绑定车牌"); + userWithCar.put("count", userCountWithCar); + long userCountWithoutCar = total - userCountWithCar; + Map userWithoutCar = new HashMap(); + userWithoutCar.put("title", "未绑定车牌"); + userWithoutCar.put("count", userCountWithoutCar); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + if (userCountWithoutCar + userCountWithCar > 0) { + userWithCar.put("percentage", nf.format(userCountWithCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + userWithoutCar.put("percentage", nf.format(userCountWithoutCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + } else { + userWithCar.put("percentage", "--"); + userWithoutCar.put("percentage", "--"); + } + List list = new ArrayList<>(); + list.add(userWithCar); + list.add(userWithoutCar); + return new ResultData(list); + } + //会员年龄层次 + if (chart.equals(EnumChart.HYNLCC.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + + } + //会员成长值 + if (chart.equals(EnumChart.HYCZZ.getCode())) { + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(tenantId); + wxLevelConfig.setSortColumns(WxLevelConfig.Field.Points_ASC); + List levelList = wxLevelConfigMapper.findList(wxLevelConfig); + + for (int i = 0; i < levelList.size(); i++) { + + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + if (i + 1 < levelList.size()) { + dto.setLevelStartScore(levelList.get(i).getPoints()); + dto.setLevelEndScore(levelList.get(i + 1).getPoints()); + } else { + dto.setLevelStartScore(levelList.get(i).getPoints()); + } + + long all = wxCUserBasicInfoMapper.findCountByScore(dto); + + levelList.get(i).setCount(all); + } + WxLevelConfig other = new WxLevelConfig(); + //没有等级的会员 + other.setLevel("无"); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + other.setCount(wxCUserBasicInfoMapper.findCount(dto) + - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); + levelList.add(other); + return new ResultData(levelList); + } + //会员手机品牌 + if (chart.equals(EnumChart.HYSJPP.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = {EnumTag.ID_49, + EnumTag.ID_50, + EnumTag.ID_51, + EnumTag.ID_52, + EnumTag.ID_53, + EnumTag.ID_54}; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + + WxTags tag = new WxTags(); + tag.setName("暂未获取"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + //会员活跃度 + if (chart.equals(EnumChart.HYHYD.getCode())) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = { + EnumTag.ID_112, + EnumTag.ID_111, + EnumTag.ID_110 + }; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + WxTags tag = new WxTags(); + tag.setName("休眠"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + //卡营销数据 + if (chart.equals(EnumChart.SALE_CARD.getCode())) { + WxCoupon wxCoupon = new WxCoupon(); + + //默认时间本月第一天,截止到当天 + if(paramsMap.get("startdate") == null || StringUtils.isBlank(paramsMap.get("startdate"))){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if(paramsMap.get("enddate") == null || StringUtils.isBlank(paramsMap.get("enddate"))){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + }else{ + Date endTime = DateUtils.stringToDate(enddate); + wxCoupon.setEnddate(endTime); + } + + Map result = new HashedMap(); + List saleMoneyList = wxCouponService.findSaleMoneyByDate(wxCoupon); + List paymentList = wxCouponService.findPaymentByDate(wxCoupon); + Map saleMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map payMentMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCoupon coupon:saleMoneyList){ + saleMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:paymentList){ + payMentMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("saleHistory",saleMap); + result.put("paymentHistory",payMentMap); + result.put("saleCardCount",wxCouponService.findSaleCardCount(wxCoupon)); + result.put("tranCount",wxCouponService.findTranCardCount(wxCoupon)); + result.put("subsidyCount",wxCouponService.findSubsidyMoney(wxCoupon)); + return new ResultData(result); + } + + //卷营销数据 + if (chart.equals(EnumChart.SALE_COUPON.getCode())) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if(paramsMap.get("startdate") == null || StringUtils.isBlank(paramsMap.get("startdate"))){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if(paramsMap.get("enddate") == null || StringUtils.isBlank(paramsMap.get("enddate"))){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + }else{ + Date endTime = DateUtils.stringToDate(enddate); + wxCoupon.setEnddate(endTime); + } + List orderCountList = wxCouponService.findCouponOrderCount(wxCoupon); + List paymentCountList = wxCouponService.findCouponPaymentCount(wxCoupon); + List priceCouponSaleCountList = wxCouponService.priceCouponSaleCount(wxCoupon); + List priceCouponPaymentCountList = wxCouponService.priceCouponPaymentCount(wxCoupon); + + Map orderCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map paymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponSaleCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponPaymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCoupon coupon:orderCountList){ + orderCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:paymentCountList){ + paymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:priceCouponSaleCountList){ + priceCouponSaleCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:priceCouponPaymentCountList){ + priceCouponPaymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("orderCountList",orderCountMap); + result.put("paymentCountList",paymentCountMap); + result.put("priceCouponSaleCountList",priceCouponSaleCountMap); + result.put("priceCouponPaymentCountList",priceCouponPaymentCountMap); + + result.put("sumPriceSaleMoney",wxCouponService.findSumPriceSaleMoney(wxCoupon)); + result.put("sumPricePayMent",wxCouponService.findSumPricePayMent(wxCoupon)); + result.put("sumSubsidyMoney",wxCouponService.findSumSubsidyMoney(wxCoupon)); + return new ResultData(result); + } + + //砍价营销数据 + if (chart.equals(EnumChart.SALE_PRESS.getCode())) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if(paramsMap.get("startdate") == null || StringUtils.isBlank(paramsMap.get("startdate"))){ + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if(paramsMap.get("enddate") == null || StringUtils.isBlank(paramsMap.get("enddate"))){ + wxCoupon.setEnddate(DateUtils.stringToDate(DateUtils.getSystemTime("yyyy-MM-dd") + " 23:59:59")); + }else{ + Date endTime = DateUtils.stringToDate(enddate); + wxCoupon.setEnddate(endTime); + } + List pressSendHistory = wxCouponService.pressSendHistory(wxCoupon); + List pressSuccHistory = wxCouponService.pressSuccHistory(wxCoupon); + List pressPaymentHistory = wxCouponService.pressPaymentHistory(wxCoupon); + + Map pressSendHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressSuccHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressPaymentHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCoupon coupon:pressSendHistory){ + pressSendHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:pressSuccHistory){ + pressSuccHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCoupon coupon:pressPaymentHistory){ + pressPaymentHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("pressSendHistory",pressSendHistoryMap); + result.put("pressSuccHistory",pressSuccHistoryMap); + result.put("pressPaymentHistory",pressPaymentHistoryMap); + + result.put("pressSuccRate",wxCouponService.pressSuccRate(wxCoupon)); + result.put("sumJoin",wxCouponService.sumJoin(wxCoupon)); + return new ResultData(result); + } + + //拼团营销数据 + if (chart.equals(EnumChart.SALE_GROUP.getCode())) { + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + //默认时间本月第一天,截止到当天 + Map result = new HashMap<>(); + Date startTime = new Date(); + Date endTime = startTime; + if (paramsMap.get("startdate") == null || StringUtils.isBlank(paramsMap.get("startdate"))) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH, 1); + startTime = c.getTime(); + params.put("startdate", startTime); + } else { + startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + params.put("startdate", startTime); + } + if (paramsMap.get("enddate") == null || StringUtils.isBlank(paramsMap.get("enddate"))) { + params.put("enddate", endTime); + } else { + endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + params.put("enddate", endTime); + } + + List> successlist = wxOrderGroupMapper.queryOrderGroupSuccessCountAndTime(params); + List> verifyList = wxOrderGroupMapper.queryOrderGroupVerifyCountAndTime(params); + + Map successMap = getDateMap(startTime, endTime); + Map verifyMap = getDateMap(startTime, endTime); + + long successCount = wxOrderGroupMapper.queryOrderGroupSuccessCount(params); + long groupCount = wxOrderGroupMapper.queryOrderGroupCount(params); + long peopleCount = wxOrderGroupMapper.queryOrderGroupPeopleCount(params); + double transferRatio = 0; + if (groupCount > 0) { + double transfer = (double) successCount / groupCount * 100; + transferRatio = new BigDecimal(transfer).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + + Map successListMap = successlist.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return (long) x.get("total"); + })); + + Map verifyListMap = verifyList.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return (long) x.get("total"); + })); + + successMap.putAll(successListMap); + verifyMap.putAll(verifyListMap); + + result.put("successList", successMap); + result.put("verifyList", verifyMap); + + result.put("successCount", successCount); + result.put("groupCount", groupCount); + result.put("peopleCount", peopleCount); + result.put("transferRatio", transferRatio); + + return new ResultData(result); + } + + + return new ResultData(datamap); + } + + private Date addDay(int addDayAmount) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DATE, addDayAmount); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + Date date = c.getTime(); + return date; + } + + private Date convertDateAndAdd(Date date, int addDayAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.DATE, addDayAmount); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + Date result = c.getTime(); + return result; + } + + public TreeMap getTimeTreeMap() { + TreeMap timemap = new TreeMap(); + timemap.put("06:00", 0); + timemap.put("07:00", 0); + timemap.put("08:00", 0); + timemap.put("09:00", 0); + timemap.put("10:00", 0); + timemap.put("11:00", 0); + timemap.put("12:00", 0); + timemap.put("13:00", 0); + timemap.put("14:00", 0); + timemap.put("15:00", 0); + timemap.put("16:00", 0); + timemap.put("17:00", 0); + timemap.put("18:00", 0); + timemap.put("19:00", 0); + timemap.put("20:00", 0); + timemap.put("21:00", 0); + timemap.put("22:00", 0); + timemap.put("23:00", 0); + return timemap; + } + + private long getCountByAge(EnumAgeInfo a, Calendar c, WxCUserBasicInfoDto dto) { + if (a.getStart() != 0 || a.getEnd() != 0) { + c.add(Calendar.YEAR, -a.getEnd()); + Date startTime = c.getTime(); + c.clear(); + c.setTime(startTime); + c.add(Calendar.YEAR, a.getEnd() - a.getStart()); + Date endTime = c.getTime(); + dto.setBirthStartTime(startTime); + dto.setBirthEndTime(endTime); + } else { + + dto.setBirthStartTime(null); + dto.setBirthEndTime(null); + } + + return wxCUserBasicInfoMapper.findCountByAge(dto); + } + + private UserStructureVo getVo(long count, long all, String name, Integer num) { + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(num); + vo.setName(name); + vo.setCount(count); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + if (all > 0) { + vo.setPercentage(nf.format(new Long(count).doubleValue() / new Long(all).doubleValue())); + } else { + vo.setPercentage("0.00%"); + } + return vo; + } + + public static Map getDateMap(Date begin, Date end) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Map map = new LinkedHashMap<>(); + map.put(format.format(begin), 0L); + Calendar calBegin = Calendar.getInstance(); + calBegin.setTime(begin); + Calendar calEnd = Calendar.getInstance(); + calEnd.setTime(end); + while (calBegin.getTime().before(end)) { + calBegin.add(Calendar.DAY_OF_MONTH, 1); + map.put(format.format(calBegin.getTime()), 0L); + } + return map; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxComponentVerifyTicketServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxComponentVerifyTicketServiceImpl.java new file mode 100644 index 000000000..b6f29c17c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxComponentVerifyTicketServiceImpl.java @@ -0,0 +1,64 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxComponentVerifyTicket; +import com.iformall.mapper.WxComponentVerifyTicketMapper; +import com.iformall.service.WxComponentVerifyTicketService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class WxComponentVerifyTicketServiceImpl implements WxComponentVerifyTicketService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxComponentVerifyTicketMapper wxComponentVerifyTicketMapper; + + + @Override + public PageInfo listAsPage(WxComponentVerifyTicket record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxComponentVerifyTicketMapper.findList(record)); + } + + @Override + public WxComponentVerifyTicket getById(Long id) { + return wxComponentVerifyTicketMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(WxComponentVerifyTicket record) { + WxComponentVerifyTicket wxComponentVerifyTicket = null; + try { + WxComponentVerifyTicket ctQ = new WxComponentVerifyTicket(); + ctQ.setComponentAppid(record.getComponentAppid()); + wxComponentVerifyTicket = wxComponentVerifyTicketMapper.selectOne(ctQ); + } catch (Exception e) { + logger.error(e.getMessage()); + } + if (wxComponentVerifyTicket == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + wxComponentVerifyTicketMapper.insertSelective(record); + } else { + record.setId(wxComponentVerifyTicket.getId()); + wxComponentVerifyTicketMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + wxComponentVerifyTicketMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java index 4c4b89b38..ccd88f487 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java @@ -22,6 +22,7 @@ import com.iformall.mapper.WxCouponMerchantMapper; import com.iformall.mapper.WxMerchantMapper; import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxCouponService; +import com.iformall.service.WxScreenAdService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +41,8 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { WxMerchantMapper wxMerchantMapper; @Autowired WxCouponMerchantMapper wxCouponMerchantMapper; + @Autowired + WxScreenAdService wxScreenAdService; /** * B端业务端 * @param record @@ -58,15 +61,47 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { } @Override - public void saveOrUpdate(WxCouponChannel record) { + public ResultData saveOrUpdate(WxCouponChannel record) { if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); wxCouponChannelMapper.insertSelective(record); } else { + + if (record.getCouponId() != null && record.getStatus() != null) { + WxCouponChannel orignal = getById(record.getId()); + if (orignal.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) + && record.getStatus().equals(EnumCouponChannelStatus.STATUS_THROW_IN.getCode())) { + + WxCoupon wxCoupon = wxCouponService.getById(orignal.getCouponId()); + if (wxCoupon == null) + return new ResultData(ErrorCode.COUPON_IS_EMPTY); + if (wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF)) + return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); + + //查找是否该券 在该频道有其他上架 + WxCouponChannel query = new WxCouponChannel(); + query.setTenantId(orignal.getTenantId()); + query.setCouponId(orignal.getCouponId()); + query.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode());//已上架 + query.setTargetAd(orignal.getTargetAd()); + List list = wxCouponChannelMapper.findList(query); + if (list != null && list.size() > 0) { + return new ResultData(ErrorCode.COUPON_CHANNEL_IS_EXISTED); + } + } + } + if (record.getStatus() != null) { + WxCouponChannel orignal = getById(record.getId()); + if (orignal.getStatus().equals(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()) + && record.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode())) { + wxScreenAdService.updateStatusByCouponChannelId(record.getId(),record.getTenantId(),EnumScreenAdStatus.INVALID.getCode()); + } + } wxCouponChannelMapper.updateByPrimaryKeySelective(record); } + return new ResultData(); } @Override @@ -171,7 +206,7 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { WxCouponChannel wxCouponChannel = new WxCouponChannel(); wxCouponChannel.setEndTime(endTime); - wxCouponChannel.setStatus(0); + wxCouponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); wxCouponChannel.setBeginTime(beginTime); wxCouponChannel.setCouponId(couponid); wxCouponChannel.setType(wxCoupon.getType()); @@ -192,13 +227,7 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { */ @Override public PageInfo listPageCVo(WxCouponChannel record, Integer pageIndex, Integer pageSize) { - PageHelper.startPage(pageIndex, pageSize); - return new PageInfo<>(wxCouponChannelMapper.findVoList(record)); - } - - @Override - public List findCouponChannelVo(WxCouponChannel record) { - return wxCouponChannelMapper.findVoList(record); + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponChannelMapper.findVoList(record)); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 7ca71168d..0e997c455 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -11,6 +11,7 @@ import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; +import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; @@ -18,6 +19,7 @@ import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; @@ -90,6 +92,18 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Autowired WxPayAccountMapper wxPayAccountMapper; + @Autowired + WxCardInfoMapper wxCardInfoMapper; + + @Autowired + WxCardTransferInfoMapper wxCardTransferInfoMapper; + + @Autowired + WxCouponChannelMapper wxCouponChannelMapper; + + @Autowired + MqBaseProducer mqBaseProducer; + @Override public PageInfo listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findList(record)); @@ -183,23 +197,18 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } @Override - public ResultData listCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { + public PageInfo listCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) { - return new ResultData(PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfCUser(record))); + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfCUser(record)); } @Override - public ResultData detailCUserVo(Long cUserId, String couponOrderId) { - WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId); - if (wxCuser == null) { - logger.error("用户不存在:" + cUserId); - throw new MallinkException(ErrorCode.USER_IS_EMPTY); - } + public WxCouponOrderCVo detailCUserVo(String couponOrderId) { WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderMapper.findDetailOfCUser(Long.valueOf(couponOrderId)); if (wxCouponOrderCVo == null) - return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); - return new ResultData(wxCouponOrderCVo); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + return wxCouponOrderCVo; } @@ -358,7 +367,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } try { wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 - wxCouponOrder.setBUserId(wxMerchantBUser.getId()); + wxCouponOrder.setbUserId(wxMerchantBUser.getId()); wxCouponOrder.setUpdateDate(new Date()); wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder); } catch (Exception e) { @@ -537,7 +546,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } // 5. get app info - WxAppinfo appInfo = wxAppinfoService.getByAppId(user.getAppId()); +// WxAppinfo appInfo = wxAppinfoService.getByAppId(user.getAppId()); // 6. get payOrder info WxPayOrder payOrder = null; @@ -558,7 +567,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { throw new MallinkException(ErrorCode.PREPAY_ID_IS_EMPTY); } - WxMaService wxMaService = MaUtil.getWeappService(appInfo); +// WxMaService wxMaService = MaUtil.getWeappService(appInfo); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String couponDetail = ""; @@ -566,91 +575,53 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { couponDetail = "满" + coupon.getUsePriceStr() + "减" + coupon.getPriceStr(); } - WxTemplateMsg msg = null; - WxMaTemplateMessage templateMessage = null; + SmartAppMsg smartAppMsg; if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { - WxTemplateMsg msgQ = new WxTemplateMsg(); - msgQ.setTenantId(couponOrder.getTenantId()); - msgQ.setType(EnumTemplateType.VERIFY_SUCCESS.getCode()); - List list = wxTemplateMsgMapper.select(msgQ); - if (list.size() > 0) { - msg = list.get(0); - } - if (msg == null) { - logger.error("找不到模板Id"); - throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); - } String gotopage = "pages/index/index"; String notes = ""; if (hadSentCoupon) { gotopage = "pages/couponorder/index/index"; notes = "您有新的券"; } - /** - * 核销成功 - * 核销金额 {{keyword1.DATA}} - * 商家名称 {{keyword2.DATA}} - * 商品 {{keyword3.DATA}} - * 商品描述 {{keyword4.DATA}} - * 订单金额 {{keyword5.DATA}} - * 核销时间 {{keyword6.DATA}} - * 温馨提示 {{keyword7.DATA}} - * - */ - templateMessage = WxMaTemplateMessage.builder() - .toUser(user.getOpenId()) - .formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId - .page(gotopage) - .data(Lists.newArrayList( - new WxMaTemplateData("keyword1", coupon.getPriceStr() + "元", "#173177"), - new WxMaTemplateData("keyword2", merchant.getName(), "#173177"), - new WxMaTemplateData("keyword3", coupon.getTitle(), "#173177"), - new WxMaTemplateData("keyword4", couponDetail, "#173177"), - new WxMaTemplateData("keyword5", coupon.getSalePriceStr() + "元", "#173177"), - new WxMaTemplateData("keyword6", dateFormat.format(new Date()), "#173177"), - new WxMaTemplateData("keyword7", notes, "#173177")) - ) - .templateId(msg.getTemplateId()) - .emphasisKeyword("keyword1.DATA") - .build(); + //mq发送小程序消息 + smartAppMsg = new SmartAppMsg(); + smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); + smartAppMsg.setAppId(user.getAppId()); + smartAppMsg.setTenantId(couponOrder.getTenantId()); + smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_SUCCESS.getCode()); + smartAppMsg.setGotopage(gotopage); + smartAppMsg.setTo(user.getOpenId()); + smartAppMsg.setFrom(payOrder.getPrepayId()); + smartAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("keyword1", coupon.getPriceStr() + "元", "#173177"), + new WxMaTemplateData("keyword2", merchant.getName(), "#173177"), + new WxMaTemplateData("keyword3", coupon.getTitle(), "#173177"), + new WxMaTemplateData("keyword4", couponDetail, "#173177"), + new WxMaTemplateData("keyword5", coupon.getSalePriceStr() + "元", "#173177"), + new WxMaTemplateData("keyword6", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateData("keyword7", notes, "#173177"))); + smartAppMsg.setEmphasisKeyword("keyword1.DATA"); } else { - WxTemplateMsg msgQ = new WxTemplateMsg(); - msgQ.setTenantId(couponOrder.getTenantId()); - msgQ.setType(EnumTemplateType.VERIFY_FAIL.getCode()); - List list = wxTemplateMsgMapper.select(msgQ); - if (list.size() > 0) { - msg = list.get(0); - } - if (msg == null) { - logger.error("找不到模板Id"); - throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); - } - /** - * 核销失败 - * 商品名称 {{keyword1.DATA}} - * 核销时间 {{keyword2.DATA}} - * 失败原因 {{keyword3.DATA}} - * 备注 {{keyword4.DATA}} - */ - templateMessage = WxMaTemplateMessage.builder() - .toUser(user.getOpenId()) - .formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId - .page("pages/index/index") - .data(Lists.newArrayList( - new WxMaTemplateData("keyword1", coupon.getTitle(), "#173177"), - new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"), - new WxMaTemplateData("keyword3", "未知"), - new WxMaTemplateData("keyword4", couponDetail)) - ) - .templateId(msg.getTemplateId()) - .emphasisKeyword("keyword1.DATA") - .build(); - } - - //templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")); + //mq发送小程序消息 + smartAppMsg = new SmartAppMsg(); + smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); + smartAppMsg.setAppId(user.getAppId()); + smartAppMsg.setTenantId(couponOrder.getTenantId()); + smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_FAIL.getCode()); + smartAppMsg.setGotopage("pages/index/index"); + smartAppMsg.setTo(user.getOpenId()); + smartAppMsg.setFrom(payOrder.getPrepayId()); + smartAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("keyword1", coupon.getTitle(), "#173177"), + new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateData("keyword3", "未知"), + new WxMaTemplateData("keyword4", couponDetail))); + smartAppMsg.setEmphasisKeyword("keyword1.DATA"); + } + try { - wxMaService.getMsgService().sendTemplateMsg(templateMessage); - } catch (WxErrorException e) { + mqBaseProducer.sendMessage(smartAppMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + } catch (Exception e) { logger.error("支付通知发送失败: " + e.getMessage()); throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); } @@ -681,9 +652,126 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } WxCardCVo cardCVo = wxCouponOrderMapper.findCardDetailOfCUser(Long.valueOf(couponOrderId)); + Long couponId = cardCVo.getCouponId(); + WxCouponChannel wxCouponChannel = new WxCouponChannel(); + wxCouponChannel.setCouponId(couponId); + List list = wxCouponChannelMapper.findList(wxCouponChannel); + if (!list.isEmpty()) { + cardCVo.setCouponChannelId(list.get(0).getId()); + } if (cardCVo == null) return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); return new ResultData(cardCVo); } + @Transactional(rollbackFor = Exception.class) + @Override + public ResultData cardAccept(WxCouponOrder record) { + //卡券是否存在 + WxCardCVo cardCVo = wxCouponOrderMapper.findCardDetailOfCUser(record.getId()); + if (cardCVo == null) { + logger.info("卡券不存在" + record.getId()); + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + //转赠人是否存在 + Long cUserId = record.getcUserId(); + WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId); + if (wxCuser == null) { + logger.info("转赠人不存在:" + cUserId); + return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), "转赠人不存在"); + } + + //判断转赠人与目前卡所有者是否为同一个 + //数据表中当前卡所有者 + Long ownerId = cardCVo.getOwnerId(); + if (!ownerId.equals(cUserId)) { + logger.info("转赠人与目前卡所有者不相同," + "转赠人:" + cUserId + ",当前所有者:" + ownerId); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } + + if (!record.getUpdateDate().equals(cardCVo.getUpdateDate())) { + return new ResultData(ErrorCode.CARD_TRANSFER_INVALID); + } + + //判断卡是否已消费 + //面额与余额是否相同 + if (!cardCVo.getAmount().equals(cardCVo.getRemainingAmount())) { + logger.info("面额与余额不相同"); + return new ResultData(ErrorCode.CARD_TRANSFER_INVALID); + } + //保存到转赠表中 id,coupon_order_id,tenant_id,title,amount,remain_amount,from_user,to_user,status,create_date,update_date + try { + saveCardTransfer(record, cardCVo); + } catch (Exception e) { + logger.info("保存卡转赠信息失败"); + throw new MallinkException(ErrorCode.CARD_TRANSFER_INVALID); + } + //更新卡拥有者 + try { + record.setcUserId(null); + record.setUpdateDate(new Date()); + wxCouponOrderMapper.updateByPrimaryKeySelective(record); + } catch (Exception e) { + logger.info("更新卡拥有者信息失败"); + throw new MallinkException(ErrorCode.CARD_TRANSFER_INVALID); + } + return new ResultData(Result.SUCCESS, "领取成功"); + } + + @Override + public ResultData queryCardStatus(WxCouponOrder record) { + //卡券是否存在 + WxCardCVo cardCVo = wxCouponOrderMapper.findCardDetailOfCUser(record.getId()); + if (cardCVo == null) { + logger.info("卡券不存在" + record.getId()); + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + //转赠人是否存在 + Long cUserId = record.getcUserId(); + WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId); + if (wxCuser == null) { + logger.info("转赠人不存在:" + cUserId); + return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), "转赠人不存在"); + } + //判断转赠人与目前卡所有者是否为同一个 + //数据表中当前卡所有者 + Long ownerId = cardCVo.getOwnerId(); + if (!ownerId.equals(cUserId)) { + logger.info("转赠人与目前卡所有者不相同," + "转赠人:" + cUserId + ",当前所有者:" + ownerId); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } + + if (!record.getUpdateDate().equals(cardCVo.getUpdateDate())) { + return new ResultData(ErrorCode.CARD_TRANSFER_INVALID); + } + + //判断卡是否已消费 + //面额与余额是否相同 + if (!cardCVo.getAmount().equals(cardCVo.getRemainingAmount())) { + logger.info("面额与余额不相同"); + return new ResultData(ErrorCode.CARD_TRANSFER_INVALID); + } + return new ResultData(Result.SUCCESS, "查询成功"); + } + + public void saveCardTransfer(WxCouponOrder couponOrder, WxCardCVo cardCVo) { + logger.info("保存卡转赠信息"); + WxCardTransferInfo wxCardTransferInfo = new WxCardTransferInfo(); + final IdWorker idWorker = IdWorker.get(); + wxCardTransferInfo.setId(idWorker.nextId()); + wxCardTransferInfo.setTenantId(cardCVo.getTenantId()); + wxCardTransferInfo.setCouponOrderId(couponOrder.getId()); + wxCardTransferInfo.setFromUser(couponOrder.getcUserId()); + wxCardTransferInfo.setToUser(couponOrder.getOwnerId()); + wxCardTransferInfo.setAmount(cardCVo.getAmount()); + wxCardTransferInfo.setRemainAmount(cardCVo.getRemainingAmount()); + wxCardTransferInfo.setStatus(EnumCouponOrderStatus.CARD_TRANSFER.getCode()); + wxCardTransferInfo.setTitle(cardCVo.getTitle()); + wxCardTransferInfo.setExpiredTime(cardCVo.getExpiredTime()); + Date date = new Date(); + wxCardTransferInfo.setCreateDate(date); + wxCardTransferInfo.setUpdateDate(date); + wxCardTransferInfoMapper.insertSelective(wxCardTransferInfo); + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java index 3819540ea..a3974c5f4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -11,7 +11,9 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponOrderMapper; import com.iformall.mapper.WxCouponSendConfigMapper; import com.iformall.mapper.WxCouponSendMapper; +import com.iformall.mapper.WxMerchantBUserMapper; import com.iformall.service.*; +import com.iformall.utils.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +43,8 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { @Autowired WxCouponOrderMapper wxCouponOrderMapper; @Autowired + WxMerchantBUserMapper wxMerchantBUserMapper; + @Autowired PushLimitService pushLimitService; @@ -80,24 +84,55 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); if (wxOrder.getProductId().equals(jo.getLong("id"))) return true; - else - return false; } catch (Exception e) { - return false; + logger.error("交易发券条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); } + return false; } else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.CAR_STOP.getCode())){ + try { + JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); + + if (DateUtils.isInDate(new Date(), jo.getString("startTime"), jo.getString("endTime"))){ + return true; + } + + } catch (Exception e) { + logger.error("停车发券条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); + } - return true; + return false; }else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.B_MICROPAY.getCode())){ + WxOrder wxOrder = (WxOrder)param; + + try { + JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); + WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(wxOrder.getProductId()); + + if (wxMerchantBUser.getMerchantId()!= null + && wxMerchantBUser.getMerchantId().equals(jo.getLong("id"))) { + return true; + } + } catch (Exception e) { + logger.error("收银发券条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); + } + return false; - return true; }else if (wxCouponSend.getSendType().equals(EnumCouponSendSendType.COUPON_VERIFY.getCode())){ + WxOrder wxOrder = (WxOrder)param; + try { + JSONObject jo = JSONObject.parseObject(wxCouponSend.getConditions()); + if (wxOrder.getProductId().equals(jo.getLong("id"))) { + return true; + } + } catch (Exception e) { + logger.error("核销发券条件判断错误:ID=" + wxCouponSend.getId() + e.getMessage()); + } + return false; - return true; }else { return false; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index b9d3eb09f..1ce8d92bb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -3,23 +3,24 @@ package com.iformall.service.impl; import java.util.*; import java.util.stream.Collectors; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxCouponMerchant; +import com.iformall.domain.po.WxScreenAd; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.enums.*; +import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponMapper; import com.iformall.mapper.WxCouponMerchantMapper; import com.iformall.mapper.WxMerchantMapper; -import com.iformall.service.WxCouponChannelService; -import com.iformall.service.WxCouponSendService; -import com.iformall.service.WxCouponService; -import com.iformall.service.WxOrderService; +import com.iformall.service.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; + @Service public class WxCouponServiceImpl implements WxCouponService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -52,6 +54,63 @@ public class WxCouponServiceImpl implements WxCouponService { @Autowired WxOrderService wxOrderService; + @Autowired + WxScreenAdService wxScreenAdService; + + + @Autowired + WxCouponChannelMapper wxCouponChannelMapper; + + + public ResultData listType(WxCoupon wxCoupon, Integer pageNum, Integer pageSize, Integer type) { + if (null == wxCoupon) wxCoupon = new WxCoupon(); + wxCoupon.setSortColumns(WxCoupon.Field.Id_DESC); + PageInfo page = null; + if (wxCoupon.getStatus() != null && wxCoupon.getStatus() == -1) + wxCoupon.setStatus(null); + page = listAsPage(wxCoupon, pageNum, pageSize, type); + + List wxCouponList = page.getList(); + + if (wxCouponList.isEmpty()) { + return new ResultData(page); + } + + List ids = wxCouponList.stream().map(p -> p.getId()).collect(Collectors.toList()); + WxCouponChannel wxCouponChannel = new WxCouponChannel(); + wxCouponChannel.setTenantId(wxCoupon.getTenantId()); + wxCouponChannel.setCouponIds(ids); + wxCouponChannel.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); + //上架状态 + List list = wxCouponChannelMapper.findList(wxCouponChannel); + if (!list.isEmpty()) { + Map> groupBy = list.stream().collect(Collectors.groupingBy(WxCouponChannel::getCouponId)); + for (WxCoupon temp : wxCouponList) { + + if (groupBy.get(temp.getId()) != null) { + List channels = new ArrayList<>(); + for (WxCouponChannel tempchannel : groupBy.get(temp.getId())) { + if (!channels.contains(tempchannel.getTargetAd())) { + channels.add(tempchannel.getTargetAd()); + } + } + String sss = JSON.toJSONString(channels); + temp.setChannels(sss); + } else { + temp.setChannels(""); + } + + } + } else { + for (WxCoupon temp : wxCouponList) { + temp.setChannels(""); + } + + } + return new ResultData(page); + } + + @Override public PageInfo listAsPage(WxCoupon record, Integer pageIndex, Integer pageSize, Integer type) { @@ -66,6 +125,16 @@ public class WxCouponServiceImpl implements WxCouponService { } } + @Override + public List list(WxCoupon record) { + return wxCouponMapper.findList(record); + } + + @Override + public PageInfo findCountData(WxCoupon record,Integer pageNum, Integer pageSize) { + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.findCountData(record)); + } + @Override public WxCoupon getById(Long id) { return wxCouponMapper.selectByPrimaryKey(id); @@ -95,7 +164,6 @@ public class WxCouponServiceImpl implements WxCouponService { return Integer.valueOf(merchantParam.getString("businessId")); } - @Override @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) public ResultData saveOrUpdate(WxCoupon record) { @@ -242,8 +310,8 @@ public class WxCouponServiceImpl implements WxCouponService { .updateStatusByCouponId(record.getId(), record.getTenantId(), EnumCouponSendStatus.INVALID.getCode()); //下架所有已砍价券 wxOrderService.updateStatusByPressCouponId(record.getId(), record.getTenantId(), EnumOrderStatus.ORDER_STATUS_PRESS_CANCEL.getCode()); - - + //下架所有相关广告 + wxScreenAdService.updateStatusByCouponId(record.getId(), record.getTenantId(), EnumScreenAdStatus.INVALID.getCode()); } record.setUpdateDate(new Date()); wxCouponMapper.updateByPrimaryKeySelective(record); @@ -256,4 +324,111 @@ public class WxCouponServiceImpl implements WxCouponService { wxCouponMapper.deleteByPrimaryKey(id); } + @Override + public List findSaleMoneyByDate(WxCoupon wxCoupon) { + return wxCouponMapper.findSaleMoneyByDate(wxCoupon); + } + + @Override + public List findPaymentByDate(WxCoupon wxCoupon) { + return wxCouponMapper.findPaymentByDate(wxCoupon); + } + + @Override + public Long findSaleCardCount(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findSaleCardCount(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public Long findTranCardCount(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findTranCardCount(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public Long findSubsidyMoney(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findSubsidyMoney(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public PageInfo findCouponData(WxCoupon record, Integer pageNum, Integer pageSize) { + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.findCouponData(record)); + } + + @Override + public List findCouponOrderCount(WxCoupon wxCoupon) { + return wxCouponMapper.findCouponOrderCount(wxCoupon); + } + + + @Override + public List findCouponPaymentCount(WxCoupon wxCoupon) { + return wxCouponMapper.findCouponPaymentCount(wxCoupon); + } + + @Override + public List priceCouponSaleCount(WxCoupon wxCoupon) { + return wxCouponMapper.priceCouponSaleCount(wxCoupon); + } + + @Override + public List priceCouponPaymentCount(WxCoupon wxCoupon) { + return wxCouponMapper.priceCouponPaymentCount(wxCoupon); + } + + @Override + public Long findSumPriceSaleMoney(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findSumPriceSaleMoney(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public Long findSumPricePayMent(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findSumPricePayMent(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public Long findSumSubsidyMoney(WxCoupon wxCoupon) { + Long count = wxCouponMapper.findSumSubsidyMoney(wxCoupon); + return (count==null)?0l:count; + } + + @Override + public PageInfo findPressData(WxCoupon record, Integer pageNum, Integer pageSize) { + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.findPressData(record)); + } + + @Override + public List pressSendHistory(WxCoupon wxCoupon) { + return wxCouponMapper.pressSendHistory(wxCoupon); + } + + @Override + public List pressSuccHistory(WxCoupon wxCoupon) { + return wxCouponMapper.pressSuccHistory(wxCoupon); + } + + @Override + public List pressPaymentHistory(WxCoupon wxCoupon) { + return wxCouponMapper.pressPaymentHistory(wxCoupon); + } + + @Override + public String pressSuccRate(WxCoupon wxCoupon) { + String count = wxCouponMapper.pressSuccRate(wxCoupon); + if ("0.00".equals(count)) { + return "0%"; + } else { + return count + "%"; + } + } + + @Override + public Long sumJoin(WxCoupon wxCoupon) { + Long count = wxCouponMapper.sumJoin(wxCoupon); + return (count==null)?0l:count; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxDeviceServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxDeviceServiceImpl.java new file mode 100644 index 000000000..49a721965 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxDeviceServiceImpl.java @@ -0,0 +1,61 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; + +import com.iformall.domain.po.WxDevice; +import com.iformall.enums.EnumDeviceStatus; +import com.iformall.mapper.WxDeviceMapper; +import com.iformall.service.WxDeviceService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + + +@Service +public class WxDeviceServiceImpl implements WxDeviceService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxDeviceMapper wxDeviceMapper; + + @Override + public PageInfo listAsPage(WxDevice record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxDeviceMapper.findList(record)); + } + + @Override + public WxDevice getById(Long id) { + return wxDeviceMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(WxDevice record) { + if (record.getId() == null) { + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateDate(new Date()); + record.setUpdateDate(new Date()); + wxDeviceMapper.insertSelective(record); + } else { + record.setUpdateDate(new Date()); + wxDeviceMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + wxDeviceMapper.deleteByPrimaryKey(id); + } + @Override + public List findList(WxDevice wxDevice) { + return wxDeviceMapper.findList(wxDevice); + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java index 8b57f88c9..27ad4e78f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFlowServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.impl; +import com.alibaba.druid.support.json.JSONUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -8,8 +9,8 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxPropertyContractMapper; -import com.iformall.mapper.WxRentContractMapper; +import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.utils.Constant; import org.apache.commons.collections.CollectionUtils; @@ -22,6 +23,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.identitylink.api.IdentityLink; import org.flowable.image.ProcessDiagramGenerator; import org.flowable.task.api.Task; +import org.flowable.task.api.TaskQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -55,13 +57,21 @@ public class WxFlowServiceImpl implements WxFlowService { @Autowired private MallUserInfoService mallUserInfoService; @Autowired - private WxMsgValidationcodeService wxMsgValidationcodeService; - @Autowired private WxRentContractMapper wxRentContractMapper; @Autowired private WxPropertyContractMapper wxPropertyContractMapper; @Autowired private WxPropertyContractService wxPropertyContractService; + @Autowired + private WxFlowRecordMapper wxFlowRecordMapper; + @Autowired + private WxBillRentMapper wxBillRentMapper; + @Autowired + private WxBillPropertyMapper wxBillPropertyMapper; + @Autowired + private WxMerchantService wxMerchantService; + @Autowired + private MqBaseProducer mqBaseProducer; /** * 获取流程key,1合同 2账单 @@ -73,24 +83,36 @@ public class WxFlowServiceImpl implements WxFlowService { return EnumFlowKey.CONTRACT.getCode(); }else if(2 == flowType){ return EnumFlowKey.BILL.getCode(); + }else if(3 == flowType){ + return EnumFlowKey.END_CONTRACT.getCode(); } return null; } /** * 更新业务数据状态 - * @param businessId - * @param flowType + * @param mapInfo + * @param applyStatus */ @Override - public void updateBusinessStatus(Long businessId,Integer flowType,Integer contractType,Integer applyStatus,Boolean supplement){ - logger.info("businessId:{},supplement:{}",businessId.toString(),supplement); + public void updateBusinessStatus(Map mapInfo,Integer applyStatus){ + Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); + Integer flowType = (Integer)mapInfo.get("flowType"); + List> variables = (List)mapInfo.get("variables"); + Boolean supplement = (Boolean)mapInfo.get("supplement"); + Integer contractType = 0; + String str = (String)getVariableByKey(variables,"contractType"); + if(StringUtils.isNotBlank(str)){ + contractType = Integer.parseInt(str); + } + if(1 == flowType){ - // 1租赁合同 2点位合同wx_rent_contract 3物业wx_property_contract 4点位物业合同 + // 1租赁合同 2点位合同 3物业 4点位物业合同 if(contractType.intValue() == 1 || contractType.intValue() == 2){ WxRentContract rent = new WxRentContract(); rent.setId(businessId); rent.setApplyStatus(applyStatus); + rent.setBusinessType(flowType); wxRentContractService.updateApplyStatus(rent); // 如果审批完成,而且是补录直接改为已签约状态(普通需要绑定商户才是已签约) @@ -101,6 +123,7 @@ public class WxFlowServiceImpl implements WxFlowService { WxPropertyContract wxPropertyContract = new WxPropertyContract(); wxPropertyContract.setId(businessId); wxPropertyContract.setApplyStatus(applyStatus); + wxPropertyContract.setBusinessType(flowType); wxPropertyContractMapper.updateApplyStatus(wxPropertyContract); // 审批完成,物业合同的合同状态需要和租赁合同同步(一致) @@ -108,17 +131,73 @@ public class WxFlowServiceImpl implements WxFlowService { wxPropertyContractService.updatePropertyContractStatus(businessId); } } + }else if(3 == flowType){ + if(contractType.intValue() == 1 || contractType.intValue() == 2){ + WxRentContract rent = new WxRentContract(); + rent.setId(businessId); + rent.setApplyStatus(applyStatus); + rent.setBusinessType(flowType); + //合同状态改成提前终止 + if(EnumRentContractAppStatus.FINISH.getCode().intValue() == applyStatus.intValue()) { + rent.setStatus(EnumRentContractStatus.CONTRACT_TERMINATE.getCode()); + + //终止租赁合同,同时终止物业合同 + Integer endProperty = (Integer)getVariableByKey(variables,"endProperty"); + if(endProperty!=null && EnumEndProperty.END_RENT_AND_PROPERTY.getCode().intValue() == endProperty.intValue()){ + WxPropertyContract wxPropertyContract = new WxPropertyContract(); + wxPropertyContract.setRentContractId(businessId); + wxPropertyContract.setStatus(EnumRentContractStatus.CONTRACT_TERMINATE.getCode()); + wxPropertyContractMapper.updateStatusByRentContractId(wxPropertyContract); + + //物业账单失效 + wxBillPropertyMapper.updateInvalidStatusByRent(rent); + } + //租赁账单失效 + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setRentContractId(businessId); + wxBillRentMapper.updateInvalidStatus(wxBillRent); + + //解绑商户和商铺关系 + wxMerchantService.disable(wxRentContractMapper.selectByPrimaryKey(businessId).getMerchantId()); + } + wxRentContractService.updateApplyStatus(rent); + }else if(contractType.intValue() == 3 || contractType.intValue() == 4){ + WxPropertyContract wxPropertyContract = new WxPropertyContract(); + wxPropertyContract.setId(businessId); + wxPropertyContract.setApplyStatus(applyStatus); + wxPropertyContract.setBusinessType(flowType); + + if(EnumRentContractAppStatus.FINISH.getCode().intValue() == applyStatus.intValue()) { + wxPropertyContract.setStatus(EnumRentContractStatus.CONTRACT_TERMINATE.getCode()); + + //账单失效 + WxBillProperty wxBillProperty = new WxBillProperty(); + wxBillProperty.setPropertyContractId(businessId); + wxBillPropertyMapper.updateInvalidStatus(wxBillProperty); + } + wxPropertyContractMapper.updateApplyStatus(wxPropertyContract); + } + } + } + + public Map mallUserInfoToMap(MallUserInfo userInfo){ + Map map = new HashedMap(); + if(userInfo != null){ + map.put("name",userInfo.getName()); + map.put("id",userInfo.getId()); + map.put("phone",userInfo.getPhone()); } + return map; } @Override @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class}) public ResultData start(Map params,Long userId,String userName,String tenantId) { String remark = (String)params.get("remark"); - Long businessId = Long.parseLong((String)params.get("businessId")); + Long businessId = Long.parseLong(params.get("businessId").toString()); Integer flowType = (Integer)params.get("businessType"); List> taskAssignee = (List)params.get("taskAssignee"); - List> variables = (List)params.get("variables"); + List> variables = (List)params.get("variables"); Boolean supplement = (Boolean)params.get("supplement"); // 设置节点处理人 @@ -128,9 +207,9 @@ public class WxFlowServiceImpl implements WxFlowService { } // map info,设置发起人等信息 MallUserInfo starterInfo = this.mallUserInfoService.getById(userId); - map.put("starter", starterInfo); + map.put("starter", mallUserInfoToMap(starterInfo)); map.put("startTime",new Date().getTime()); - map.put("businessId",businessId); + map.put("businessId",businessId+""); map.put("flowType",flowType); map.put("taskAssignee",taskAssignee); map.put("variables",variables); @@ -139,13 +218,8 @@ public class WxFlowServiceImpl implements WxFlowService { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(getFlowKeyByType(flowType), map); logger.debug("流程启动,流程id:{}",processInstance.getId()); - // 合同审核状态改为审核中 - Integer contractType = 0; - String str = getVariableByKey(variables,"contractType"); - if(StringUtils.isNotBlank(str)){ - contractType = Integer.parseInt(str); - } - updateBusinessStatus(businessId,flowType,contractType,EnumRentContractAppStatus.APPLYING.getCode(),supplement); + params.put("flowType",flowType); + updateBusinessStatus(params,EnumRentContractAppStatus.APPLYING.getCode()); // 保存wx_flow_record表审批记录 WxFlowRecord wxFlowRecord = new WxFlowRecord(); @@ -157,6 +231,8 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setUserName(userName); wxFlowRecord.setStatus(EnumFlowRecordStatus.NEW.getCode()); wxFlowRecord.setTaskName("发起"); + wxFlowRecord.setCurrStatus(EnumRentContractAppStatus.APPLYING.getCode()); + wxFlowRecord.setVariables(variablesToJson(variables)); wxFlowRecordService.saveOrUpdate(wxFlowRecord); // 给审批人发送代办通知短信 @@ -166,21 +242,40 @@ public class WxFlowServiceImpl implements WxFlowService { content.put("userName",starterInfo.getName()); content.put("page", Constant.adminPage); - WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setTenantId(tenantId); - wxMsgValidationcode.setPhone(mallUserInfo.getPhone()); - wxMsgValidationcode.setType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); - wxMsgValidationcodeService.sendWorkFlowNodify(wxMsgValidationcode,content); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); + wxMsgRecord.setReceiver(mallUserInfo.getPhone()); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(content); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } - return new ResultData(); } + public String variablesToJson(List> variables){ + HashMap map = new HashMap<>(); + for (Map mapInfo:variables) { + map.put((String)mapInfo.get("key"),mapInfo.get("value")); + } + return JSONUtils.toJSONString(map); + } + @Override - public ResultData list(Integer flowType, Integer pageNum, Integer pageSize,Long userId) { - String flowKey = getFlowKeyByType(flowType); - int total = taskService.createTaskQuery().processDefinitionKey(flowKey) - .taskCandidateUser(userId.toString()).list().size(); + public ResultData list(String flowType, Integer pageNum, Integer pageSize,Long userId) { + TaskQuery taskQuery = taskService.createTaskQuery(); + //流程过滤条件 + if(StringUtils.isNotBlank(flowType)) { + List definitionKeyList = new ArrayList<>(); + for (String ft : flowType.split(",")) { + definitionKeyList.add(getFlowKeyByType(Integer.parseInt(ft))); + } + if(CollectionUtils.isNotEmpty(definitionKeyList)){ + taskQuery.processDefinitionKeyIn(definitionKeyList); + } + } + + int total = taskQuery.taskCandidateUser(userId.toString()).list().size(); int pages; if(total % pageSize == 0){ pages = total / pageSize; @@ -188,8 +283,7 @@ public class WxFlowServiceImpl implements WxFlowService { pages = total / pageSize +1; } - List tasks = taskService.createTaskQuery().processDefinitionKey(flowKey) - .taskCandidateUser(userId.toString()).orderByTaskCreateTime().desc() + List tasks = taskQuery.orderByTaskCreateTime().desc() .listPage((pageNum -1) * pageSize,pageSize); List> result = new ArrayList<>(); @@ -197,15 +291,17 @@ public class WxFlowServiceImpl implements WxFlowService { Map taskInfoMap = new HashedMap(); Map mapInfo = taskService.getVariables(task.getId()); if(mapInfo!=null){ - taskInfoMap.put("starter",((MallUserInfo)mapInfo.get("starter")).getName()); + Map userMap = (Map)mapInfo.get("starter"); + taskInfoMap.put("starter",userMap!=null?userMap.get("name"):""); taskInfoMap.put("startTime",mapInfo.get("startTime")); taskInfoMap.put("processInstanceId",task.getProcessInstanceId()); taskInfoMap.put("taskId",task.getId()); taskInfoMap.put("businessId",mapInfo.get("businessId")); - List> variables = (List)mapInfo.get("variables"); //定制variables,回传 + taskInfoMap.put("businessType",mapInfo.get("flowType")); + List> variables = (List)mapInfo.get("variables"); //定制variables,回传 if(CollectionUtils.isNotEmpty(variables)){ - for (Map m:variables) { - taskInfoMap.put(m.get("key"),m.get("value")); + for (Map m:variables) { + taskInfoMap.put((String)m.get("key"),m.get("value")); } } result.add(taskInfoMap); @@ -219,7 +315,6 @@ public class WxFlowServiceImpl implements WxFlowService { return new ResultData(pageInfo); } - @Override public ResultData applyHistory(Long businessId,String tenantId) { List result = wxFlowRecordService.findList(new WxFlowRecord(businessId,tenantId)); @@ -240,8 +335,6 @@ public class WxFlowServiceImpl implements WxFlowService { result.add(0,wxFlowRecord); } } - - return new ResultData(result); } @@ -285,8 +378,8 @@ public class WxFlowServiceImpl implements WxFlowService { assigneeArray = assignee.get("assignee").split(","); userName = ""; for (String userid:assigneeArray) { - MallUserInfo mallUserInfo = this.mallUserInfoService.getById(Long.parseLong(userid)); - userName += mallUserInfo.getName()+" "; + MallUserInfo mallUserInfo = this.mallUserInfoService.getById(Long.parseLong(userid)); + userName += mallUserInfo.getName()+" "; } wxFlowRecord = new WxFlowRecord(); @@ -327,12 +420,12 @@ public class WxFlowServiceImpl implements WxFlowService { taskName = task.getName(); taskKey = task.getTaskDefinitionKey(); Map mapInfo = taskService.getVariables(task.getId()); - Long businessId = (Long)mapInfo.get("businessId"); + Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); Integer flowType = (Integer)mapInfo.get("flowType"); taskService.complete(taskId); // 判断流程是否结束,并发送短信通知 - isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); + boolean end = isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); //保存wx_flow_record表审批记录 WxFlowRecord wxFlowRecord = new WxFlowRecord(); @@ -348,6 +441,12 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setTaskKey(taskKey); wxFlowRecordService.saveOrUpdate(wxFlowRecord); + //修改记录表当前状态 + if(end){ + wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.FINISH.getCode())); + }else{ + wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.APPLYING.getCode())); + } return new ResultData(); } @@ -357,15 +456,14 @@ public class WxFlowServiceImpl implements WxFlowService { * @param processInstanceId * @param tenantId */ - public void isEndAndSendMsg(Map mapInfo,String taskKey,String processInstanceId,String tenantId,String userName){ + public boolean isEndAndSendMsg(Map mapInfo,String taskKey,String processInstanceId,String tenantId,String userName){ // 发送短信 Map msgReplaceMap = new HashedMap(); WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setTenantId(tenantId); - MallUserInfo starter = (MallUserInfo)mapInfo.get("starter"); + Map userMap = (Map)mapInfo.get("starter"); List> taskAssigneeList = (List)mapInfo.get("taskAssignee"); - Long businessId = (Long)mapInfo.get("businessId"); - Boolean supplement = (Boolean)mapInfo.get("supplement"); + Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); // 判断下个节点是否有设置审批人,没有,直接通过,有,发短信通知 if(!isEnded(processInstanceId)){ @@ -374,13 +472,16 @@ public class WxFlowServiceImpl implements WxFlowService { String assignee = ""; List mallUserInfoList = getUserByProcessInstanceId(processInstanceId); for (MallUserInfo mallUserInfo:mallUserInfoList) { - msgReplaceMap.put("userName",mallUserInfo.getName()); + msgReplaceMap.put("userName",userName); msgReplaceMap.put("page",Constant.adminPage); - assignee += mallUserInfo.getName()+" "; - wxMsgValidationcode.setPhone(mallUserInfo.getPhone()); - wxMsgValidationcode.setType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); - wxMsgValidationcodeService.sendWorkFlowNodify(wxMsgValidationcode,msgReplaceMap); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_ASSIGNEE_NODIFY.getCode()); + wxMsgRecord.setReceiver(mallUserInfo.getPhone()); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } // 给发起人发送短信 @@ -390,34 +491,34 @@ public class WxFlowServiceImpl implements WxFlowService { msgReplaceMap.put("contract",businessId+""); msgReplaceMap.put("toUserName",assignee.trim()); - wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setPhone(starter.getPhone()); - wxMsgValidationcode.setType(EnumMsgModel.FLOW_APPLY_NODIFY.getCode()); - wxMsgValidationcodeService.sendWorkFlowNodify(wxMsgValidationcode,msgReplaceMap); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_APPLY_NODIFY.getCode()); + wxMsgRecord.setReceiver(userMap!=null?(String)userMap.get("phone"):""); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + return false; }else{ - //需要测下三节点 //继续递归判断 - isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); + return isEndAndSendMsg(mapInfo,taskKey,processInstanceId,tenantId,userName); } }else{ - // 完成,修改业务状态 - Integer flowType = (Integer)mapInfo.get("flowType"); - List> variables = (List)mapInfo.get("variables"); - Integer contractType = 0; - String str = getVariableByKey(variables,"contractType"); - if(StringUtils.isNotBlank(str)){ - contractType = Integer.parseInt(str); - } - updateBusinessStatus(businessId,flowType,contractType,EnumRentContractAppStatus.FINISH.getCode(),supplement); + updateBusinessStatus(mapInfo,EnumRentContractAppStatus.FINISH.getCode()); // 给发起人发送审批通过消息 msgReplaceMap = new HashedMap(); msgReplaceMap.put("contract",businessId+""); msgReplaceMap.put("page",Constant.adminPage); - wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setPhone(starter.getPhone()); - wxMsgValidationcode.setType(EnumMsgModel.FLOW_PASS_NODIFY.getCode()); - wxMsgValidationcodeService.sendWorkFlowNodify(wxMsgValidationcode,msgReplaceMap); + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_PASS_NODIFY.getCode()); + wxMsgRecord.setReceiver(userMap!=null?(String)userMap.get("phone"):""); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + return true; } } @@ -448,21 +549,18 @@ public class WxFlowServiceImpl implements WxFlowService { @Override @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class}) - public ResultData reject(Map params,Long userId,String userName,String tenantId) { - String taskId = params.get("taskId"); - String processInstanceId = params.get("processInstanceId"); - String remark = params.get("remark"); + public ResultData reject(Map params,Long userId,String userName,String tenantId) { + String processInstanceId = (String)params.get("processInstanceId"); + String remark = (String)params.get("remark"); - Map mapInfo = taskService.getVariables(taskId); - Long businessId = (Long)mapInfo.get("businessId"); + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); + Map mapInfo = taskService.getVariables(task.getId()); + Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); Integer flowType = (Integer)mapInfo.get("flowType"); - MallUserInfo starter = (MallUserInfo)mapInfo.get("starter"); - List> variables = (List)mapInfo.get("variables"); - Boolean supplement = (Boolean)mapInfo.get("supplement"); + Map userMap = (Map)mapInfo.get("starter"); String taskName; String taskKey; - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null) { return new ResultData(ErrorCode.FLOW_INST_NOT_EXIST.getCode(), "任务不存在"); } @@ -472,17 +570,13 @@ public class WxFlowServiceImpl implements WxFlowService { runtimeService.deleteProcessInstance(processInstanceId, "驳回"); // 修改合同审核状态为驳回 - Integer contractType = 0; - String str = getVariableByKey(variables,"contractType"); - if(StringUtils.isNotBlank(str)){ - contractType = Integer.parseInt(str); - } - updateBusinessStatus(businessId,flowType,contractType,EnumRentContractAppStatus.REJECT.getCode(),supplement); + params.putAll(mapInfo); + updateBusinessStatus(params,EnumRentContractAppStatus.REJECT.getCode()); //保存wx_flow_record表审批记录 WxFlowRecord wxFlowRecord = new WxFlowRecord(); wxFlowRecord.setBusinessId(businessId); - wxFlowRecord.setTaskId(taskId); + wxFlowRecord.setTaskId(task.getId()); wxFlowRecord.setProcessInstanceId(processInstanceId); wxFlowRecord.setRemark(remark); wxFlowRecord.setUserId(userId); @@ -492,6 +586,8 @@ public class WxFlowServiceImpl implements WxFlowService { wxFlowRecord.setTaskKey(taskKey); wxFlowRecord.setTaskName(taskName); wxFlowRecordService.saveOrUpdate(wxFlowRecord); + //修改记录表当前状态 + wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.REJECT.getCode())); // 给发起人发送驳回消息 Map msgReplaceMap = new HashedMap(); @@ -500,10 +596,56 @@ public class WxFlowServiceImpl implements WxFlowService { msgReplaceMap.put("contract",businessId+""); msgReplaceMap.put("page",Constant.adminPage); - wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setPhone(starter.getPhone()); - wxMsgValidationcode.setType(EnumMsgModel.FLOW_REJECT_NODIFY.getCode()); - wxMsgValidationcodeService.sendWorkFlowNodify(wxMsgValidationcode,msgReplaceMap); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.FLOW_REJECT_NODIFY.getCode()); + wxMsgRecord.setReceiver(userMap!=null?(String)userMap.get("phone"):""); + wxMsgRecord.setTenantId(tenantId); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + return new ResultData(); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class}) + public ResultData setBack(Map params,Long userId,String userName) { + String processInstanceId = (String)params.get("processInstanceId"); + String remark = (String)params.get("remark"); + + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); + Map mapInfo = taskService.getVariables(task.getId()); + Long businessId = Long.parseLong(mapInfo.get("businessId").toString()); + Integer flowType = (Integer)mapInfo.get("flowType"); + + String taskName; + String taskKey; + if (task == null) { + return new ResultData(ErrorCode.FLOW_INST_NOT_EXIST.getCode(), "任务不存在"); + } + taskName = task.getName(); + taskKey = task.getTaskDefinitionKey(); + + runtimeService.deleteProcessInstance(processInstanceId, "撤回"); + + // 修改合同审核状态为撤回 + params.putAll(mapInfo); + updateBusinessStatus(params,EnumRentContractAppStatus.SETBACK.getCode()); + + //保存wx_flow_record表审批记录 + WxFlowRecord wxFlowRecord = new WxFlowRecord(); + wxFlowRecord.setBusinessId(businessId); + wxFlowRecord.setTaskId(task.getId()); + wxFlowRecord.setProcessInstanceId(processInstanceId); + wxFlowRecord.setRemark(remark); + wxFlowRecord.setUserId(userId); + wxFlowRecord.setStatus(EnumFlowRecordStatus.SETBACK.getCode()); + wxFlowRecord.setBusinessType(flowType); + wxFlowRecord.setUserName(userName); + wxFlowRecord.setTaskKey(taskKey); + wxFlowRecord.setTaskName(taskName); + wxFlowRecordService.saveOrUpdate(wxFlowRecord); + //修改记录表当前状态 + wxFlowRecordMapper.updateCurrStatus(new WxFlowRecord(processInstanceId,EnumRentContractAppStatus.SETBACK.getCode())); return new ResultData(); } @@ -533,6 +675,11 @@ public class WxFlowServiceImpl implements WxFlowService { List userIdList = getTaskCandidateUserId(task.getId()); for (String userId:userIdList) { MallUserInfo mallUserInfo = this.mallUserInfoService.getById(Long.parseLong(userId)); + mallUserInfo.setPassword(null); + mallUserInfo.setBopenId(null); + if(StringUtils.isNotBlank(mallUserInfo.getWebOpenId())) { + mallUserInfo.setWebOpenId("保密"); + } result.add(mallUserInfo); } } @@ -566,7 +713,10 @@ public class WxFlowServiceImpl implements WxFlowService { return userIdList; } - + @Override + public PageInfo listAsPage(WxFlowRecord record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxFlowRecordMapper.findList(record)); + } @Override public void genProcessDiagram(HttpServletResponse httpServletResponse,String businessId) throws Exception { @@ -621,8 +771,9 @@ public class WxFlowServiceImpl implements WxFlowService { } } - public static String getVariableByKey(List> variables,String key){ - for (Map map:variables) { + public static Object getVariableByKey(List> variables,String key){ + if(variables == null) return null; + for (Map map:variables) { if(map.get("key").equals(key)){ return map.get("value"); } @@ -630,4 +781,6 @@ public class WxFlowServiceImpl implements WxFlowService { return null; } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java index 97f89cd1a..93e448dcd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java @@ -13,6 +13,7 @@ import com.iformall.enums.EnumCouponStatus; import com.iformall.enums.EnumGameStatus; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponOrderMapper; import com.iformall.mapper.WxGameActionLogMapper; import com.iformall.service.WxCouponChannelService; import com.iformall.service.WxCouponService; @@ -43,6 +44,9 @@ public class WxGameServiceImpl implements WxGameService { @Autowired WxCouponService wxCouponService; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired WxCouponChannelService wxCouponChannelService; @@ -82,24 +86,61 @@ public class WxGameServiceImpl implements WxGameService { @Override - public void addActionLog(WxGameActionLog wxGameActionLog) { + public ResultData addActionLog(Long userId, Long gameId, Long orderId) { + + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setcUserId(userId); + wxCouponOrder.setOrderId(orderId); + + if (orderId != 0) { + try { + wxCouponOrder = wxCouponOrderMapper.selectOne(wxCouponOrder); + } catch (Exception e) { + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + + if (wxCouponOrder == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } final IdWorker idWorker = IdWorker.get(); + WxGameActionLog wxGameActionLog = new WxGameActionLog(); + wxGameActionLog.setUserId(userId); + wxGameActionLog.setTenantId(wxCouponOrder.getTenantId()); + wxGameActionLog.setGameId(gameId); + wxGameActionLog.setCouponOrderId(wxCouponOrder.getOrderId()); wxGameActionLog.setId(idWorker.nextId()); wxGameActionLog.setCreateTime(new Date()); wxGameActionLogMapper.insertSelective(wxGameActionLog); + return new ResultData(); } @Override - public ResultData checkLimit(Long gameId, Long userId) { + public ResultData getCount(Long gameId, Long userId) { + + WxGame wxGame = wxGameMapper.selectByPrimaryKey(gameId); + if (wxGame == null) + return new ResultData(ErrorCode.GAME_NOT_FOUND); WxGameActionLog wxGameActionLog = new WxGameActionLog(); + wxGameActionLog.setTenantId(wxGame.getTenantId()); wxGameActionLog.setUserId(userId); wxGameActionLog.setGameId(gameId); - int limit = wxGameMapper.selectByPrimaryKey(gameId).getPlayLimit(); - if (limit != 0 && wxGameActionLogMapper.getCount(wxGameActionLog) > limit) - return new ResultData(ErrorCode.GAME_HAS_BEEN_LIMITED); - return new ResultData(); + int playLimit = wxGame.getPlayLimit(); + int AwardLimit = wxGame.getAwardLimit(); + int playCount = wxGameActionLogMapper.getPlayCount(wxGameActionLog); + int AwardCount = wxGameActionLogMapper.getAwardCount(wxGameActionLog); + + boolean playAble = !(( playLimit != 0 && playCount >= playLimit) + || (AwardLimit != 0 && AwardCount >= AwardLimit)); + + Map map = new HashMap(); + map.put("playLimit",playLimit); + map.put("AwardLimit",AwardLimit); + map.put("playCount",playCount); + map.put("AwardCount",AwardCount); + map.put("playAble",playAble); + return new ResultData(map); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java index 2336ac629..d424e5c4c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallApplyServiceImpl.java @@ -7,17 +7,16 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxMallApply; -import com.iformall.domain.po.WxMsgConfig; -import com.iformall.domain.po.WxMsgValidationcode; -import com.iformall.domain.po.WxMsgValidationcodeModel; -import com.iformall.enums.EnumVerifyCode; +import com.iformall.domain.po.*; +import com.iformall.enums.*; import com.iformall.mapper.WxMallApplyMapper; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.mapper.WxMsgValidationcodeModelMapper; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.WxMallApplyService; import com.iformall.utils.*; +import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -42,6 +41,8 @@ public class WxMallApplyServiceImpl implements WxMallApplyService { @Autowired WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; + @Autowired + private MqBaseProducer mqBaseProducer; @Override public PageInfo listAsPage(WxMallApply record, Integer pageIndex, Integer pageSize) { @@ -83,7 +84,7 @@ public class WxMallApplyServiceImpl implements WxMallApplyService { } @Override - public ResultData sendvalidationcode(WxMsgValidationcode wxMsgValidationcode) { + public ResultData sendvalidationcode(WxMsgValidationcode wxMsgValidationcode){ //1、查看是否存在未过期的短信,有返回成功 没有继续 List wxmsgvalidationcodelist = wxMsgValidationcodeMapper.findList(wxMsgValidationcode); Date currentdate = new Date(); @@ -91,54 +92,65 @@ public class WxMallApplyServiceImpl implements WxMallApplyService { validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList()); if(wxmsgvalidationcodelist.size()>0) return new ResultData(ErrorCode.MSG_REPEAT_SEND.getCode(),ErrorCode.MSG_REPEAT_SEND.getMessage()); - //3、从短信配置中查询密钥 bid 等信息 - WxMsgConfig wxMsgConfig = new WxMsgConfig(); - wxMsgConfig.setTenantId(wxMsgValidationcode.getTenantId()); - List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); - if (wxMsgConfigs.size() == 0) new ResultData(500,"发送失败"); - wxMsgConfig = wxMsgConfigs.get(0); - - WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); - wxMsgValidationcodeModel.setTenantId(wxMsgConfig.getTenantId()); - wxMsgValidationcodeModel.setType(wxMsgValidationcode.getType()); - wxMsgValidationcodeModel.setName("验证码"); - wxMsgValidationcodeModel = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel).get(0); - wxMsgValidationcode.setSignature(wxMsgValidationcodeModel.getSignature()); - - - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); +// WxMsgConfig wxMsgConfig = new WxMsgConfig(); +// wxMsgConfig.setTenantId(wxMsgValidationcode.getTenantId()); +// List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); +// if (wxMsgConfigs.size() == 0) new ResultData(500,"发送失败"); +// wxMsgConfig = wxMsgConfigs.get(0); +// +// WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); +// wxMsgValidationcodeModel.setTenantId(wxMsgConfig.getTenantId()); +// wxMsgValidationcodeModel.setType(wxMsgValidationcode.getType()); +// wxMsgValidationcodeModel.setName("验证码"); +// wxMsgValidationcodeModel = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel).get(0); +// wxMsgValidationcode.setSignature(wxMsgValidationcodeModel.getSignature()); +// +// String secret = wxMsgConfig.getSecret(); +// String bid = wxMsgConfig.getBid(); +// String publickey = wxMsgConfig.getPublickey(); +// //验证码 +// int code = (int) ((Math.random() * 9 + 1) * 100000); +// String phone = wxMsgValidationcode.getPhone(); +// String signature = wxMsgValidationcode.getSignature(); +// //内容 +// String msg = wxMsgValidationcodeModel.getContent().replace("{s6}", String.valueOf(code)); +// wxMsgValidationcode.setCode(String.valueOf(code)); +// wxMsgValidationcode.setMsg(msg); +// +// String notifyUrl = wxMsgConfig.getNotifyurl(); +// Integer modelId = wxMsgValidationcodeModel.getModelId(); +// String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); +// JSONObject jsonObjectResult = JSONObject.parseObject(result); +// String ret = jsonObjectResult.get("ret").toString(); +// +// if (ret.equals("1")) { +// final IdWorker idWorker = IdWorker.get(); +// wxMsgValidationcode.setId(idWorker.nextId()); +// long currentTime = System.currentTimeMillis() ; +// Date createtime=new Date(currentTime); +// Integer minutes = wxMsgValidationcodeModel.getMinutes(); +// currentTime +=minutes*60*1000; +// Date expiredate=new Date(currentTime); +// wxMsgValidationcode.setExpiretime(expiredate); +// wxMsgValidationcode.setCreatetime(createtime); +// wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); +// return new ResultData(Result.SUCCESS,"发送成功"); +// } + //验证码 int code = (int) ((Math.random() * 9 + 1) * 100000); - String phone = wxMsgValidationcode.getPhone(); - String signature = wxMsgValidationcode.getSignature(); - //内容 - String msg = wxMsgValidationcodeModel.getContent().replace("{s6}", String.valueOf(code)); - wxMsgValidationcode.setCode(String.valueOf(code)); - wxMsgValidationcode.setMsg(msg); - - String notifyUrl = wxMsgConfig.getNotifyurl(); - Integer modelId = wxMsgValidationcodeModel.getModelId(); - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - String ret = jsonObjectResult.get("ret").toString(); - - if (ret.equals("1")) { - final IdWorker idWorker = IdWorker.get(); - wxMsgValidationcode.setId(idWorker.nextId()); - long currentTime = System.currentTimeMillis() ; - Date createtime=new Date(currentTime); - Integer minutes = wxMsgValidationcodeModel.getMinutes(); - currentTime +=minutes*60*1000; - Date expiredate=new Date(currentTime); - wxMsgValidationcode.setExpiretime(expiredate); - wxMsgValidationcode.setCreatetime(createtime); - wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); - return new ResultData(Result.SUCCESS,"发送成功"); - } - return new ResultData(500,"发送失败"); + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(wxMsgValidationcode.getType()); + wxMsgRecord.setReceiver(wxMsgValidationcode.getPhone()); + wxMsgRecord.setTenantId(wxMsgValidationcode.getTenantId()); + Map map = new HashedMap(); + map.put("s6",String.valueOf(code)); + wxMsgRecord.setDynamicContentMap(map); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + + return new ResultData(Result.SUCCESS,"发送成功"); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 675c48bb7..bc71606f7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -104,6 +104,12 @@ public class WxMerchantServiceImpl implements WxMerchantService { return pageInfo; } + + @Override + public PageInfo listAsPageCVo(WxMerchantVo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMerchantMapper.findListCVo(record)); + } + @Override public WxMerchantVo getMerchantInfo(HashMap params) { return wxMerchantMapper.getMerchantByCode(params); @@ -315,10 +321,18 @@ public class WxMerchantServiceImpl implements WxMerchantService { wxRentContract.setUpdatetime(new Date()); wxRentContract.setStatus(EnumRentContractStatus.SIGNED_RENT_UNPAID.getCode()); wxRentContractMapper.updateByPrimaryKeySelective(wxRentContract); + + //预览账单改为正式,并写入商户id(租赁合同需要绑定商户才变成已签约) + WxBillRent billRent = new WxBillRent(); + billRent.setRentContractId(wxMerchant.getRentContractId()); + billRent.setIsPreview(EnumIsPreview.NO.getCode()); + billRent.setMerchantId(merchantId); + wxBillRentMapper.updatePreviewStatus(billRent); + //创建账单 - wxRentContractService.buildRent(wxMerchant, userId); + //wxRentContractService.buildRent(wxMerchant, userId,null,EnumIsPreview.NO.getCode()); //创建押金 - wxRentContractService.buildDeposit(wxMerchant, userId); + wxRentContractService.buildDeposit(wxMerchant, userId,wxMerchant.getRentContractId()); } return new ResultData(Result.SUCCESS, "商户创建成功", merchantId); } catch (Exception e) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java new file mode 100644 index 000000000..72e3f21e1 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java @@ -0,0 +1,47 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.mapper.*; +import com.iformall.service.WxMsgRecordService; +import com.iformall.utils.JsonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.UUID; + +/** + * @author luozukai + * 业务短信发送实现 + */ +@Service +public class WxMsgRecordServiceImpl implements WxMsgRecordService { + @Autowired + private WxMsgRecordMapper wxMsgRecordMapper; + + @Override + public void save(BaseMsg data) { + WxMsgRecord msgRecord = new WxMsgRecord(); + final IdWorker idWorker = IdWorker.get(); + + if(data instanceof WxMsgRecord){ + msgRecord = (WxMsgRecord)data; + } + + msgRecord.setMsgType(data.getMsgType()); + msgRecord.setUuid(UUID.randomUUID().toString()); + msgRecord.setMsgJson(JsonUtil.obj2Json(data)); + msgRecord.setId(idWorker.nextId()); + wxMsgRecordMapper.save(msgRecord); + } + + @Override + public List findList(WxMsgRecord record) { + return wxMsgRecordMapper.findList(record); + } + + @Override + public void update(WxMsgRecord record) { + wxMsgRecordMapper.update(record); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java index 1ff4d8e87..851674853 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java @@ -8,11 +8,9 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; -import com.iformall.enums.EnumMsgSend; -import com.iformall.enums.EnumMsgSendStatus; -import com.iformall.enums.EnumMsgStatus; -import com.iformall.enums.EnumVerifyCode; +import com.iformall.enums.*; import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.service.WxCUserTagsService; import com.iformall.service.WxMsgService; import com.iformall.utils.DateUtils; @@ -52,6 +50,9 @@ public class WxMsgServiceImpl implements WxMsgService { @Autowired WxMsgModelMapper wxMsgModelMapper; + @Autowired + MqBaseProducer mqBaseProducer; + @Override public PageInfo listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) { PageHelper.startPage(pageIndex, pageSize); @@ -110,7 +111,11 @@ public class WxMsgServiceImpl implements WxMsgService { if (wxMsg.getExpectSendNumber().intValue() > 1000) { batchSendMsg(wxMsg, wxMsgConfig, null); } else { - sendmsg(wxMsg, wxMsgConfig, null); + //sendmsg(wxMsg, wxMsgConfig, null); + wxMsg.setWxMsgConfig(wxMsgConfig); + wxMsg.setCouponInject(null); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); + mqBaseProducer.sendMessage(wxMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),null); } return new ResultData(Result.SUCCESS, "短信已发送"); } else { @@ -136,7 +141,10 @@ public class WxMsgServiceImpl implements WxMsgService { if (wxMsg.getExpectSendNumber().intValue() > 1000) { batchSendMsg(wxMsg, wxMsgConfig, null); } else { - sendmsg(wxMsg, wxMsgConfig, null); + //sendmsg(wxMsg, wxMsgConfig, null); + wxMsg.setWxMsgConfig(wxMsgConfig); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); + mqBaseProducer.sendMessage(wxMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } return new ResultData(Result.SUCCESS, "短信已发送"); } else { @@ -149,7 +157,6 @@ public class WxMsgServiceImpl implements WxMsgService { } } - @Override public void deleteById(Long id) { wxMsgMapper.deleteByPrimaryKey(id); @@ -175,83 +182,95 @@ public class WxMsgServiceImpl implements WxMsgService { String phones = StringUtils.join(phoneList, ","); wxMsg.setPhones(phones); wxMsg.setExpectSendNumber(extra); - sendmsg(wxMsg, wxMsgConfig, couponInject); + //sendmsg(wxMsg, wxMsgConfig, couponInject); + wxMsg.setWxMsgConfig(wxMsgConfig); + wxMsg.setCouponInject(couponInject); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); + mqBaseProducer.sendMessage(wxMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } else { List phoneList = Arrays.asList(split).subList(i * 1000, (i + 1) * 1000); String phones = StringUtils.join(phoneList, ","); wxMsg.setExpectSendNumber(1000); wxMsg.setPhones(phones); - sendmsg(wxMsg, wxMsgConfig, couponInject); + //sendmsg(wxMsg, wxMsgConfig, couponInject); + wxMsg.setWxMsgConfig(wxMsgConfig); + wxMsg.setCouponInject(couponInject); + wxMsg.setMsgType(EnumMsgRecordType.SMS_CALLBACK.getCode()); + mqBaseProducer.sendMessage(wxMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); } } } - public ResultData sendmsg(WxMsg record, WxMsgConfig wxMsgConfig, WxCouponInject couponInject) { - logger.info("发送短信开始..."); - logger.info("couponInject:" + couponInject); - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - - String phone = record.getPhones(); - String signature = record.getSignature(); - String msg = record.getMsg(); - String notifyUrl = wxMsgConfig.getNotifyurl(); - WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(record.getModelId()); - Integer modelId = null; - if (wxMsgModel != null) { - modelId = wxMsgModel.getModelId(); - } - logger.info("=============迈外迪API开始调用"); - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); - logger.info("=============迈外迪API返回结果:" + result); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - String ret = jsonObjectResult.get("ret").toString(); - String batchNo = jsonObjectResult.get("data").toString(); - String resultMsg = jsonObjectResult.get("msg").toString(); - record.setReturnResult(jsonObjectResult.toJSONString()); - if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { - record.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); - } else { - record.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); - } - - final IdWorker idWorker = IdWorker.get(); - long id = idWorker.nextId(); - WxMsg wxMsg = new WxMsg(); - wxMsg.setTenantId(record.getTenantId()); - wxMsg.setModelId(record.getModelId()); - wxMsg.setMsg(record.getMsg()); - wxMsg.setExpectSendNumber(record.getExpectSendNumber()); - wxMsg.setPhones(record.getPhones()); - wxMsg.setSignature(record.getSignature()); - wxMsg.setIsright(record.getIsright()); - wxMsg.setName(record.getName()); - wxMsg.setSendstatus(record.getSendstatus()); - wxMsg.setLabel(record.getLabel()); - wxMsg.setStatus(record.getStatus()); - wxMsg.setWay(record.getWay()); - wxMsg.setId(id); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); - wxMsg.setSendtime(systemTime); - wxMsg.setCreatetime(DateUtils.stringToDate(systemTime, "yyyy-MM-dd HH:mm:ss")); - //精准投放 - if (couponInject != null) { - wxMsg.setCouponInjectId(couponInject.getId()); - } - wxMsgMapper.insertSelective(wxMsg); - - logger.info("发送短信结束..."); - if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { - addMsgCallback(wxMsg, batchNo); - return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态", id); - } else { - return new ResultData(ErrorCode.MSG_SEND_INTERFACE_ERROR.getCode(), - ErrorCode.MSG_SEND_INTERFACE_ERROR.getMessage() + ":" + resultMsg); - } - - } +// @Deprecated +// public ResultData sendmsg(WxMsg record, WxMsgConfig wxMsgConfig, WxCouponInject couponInject) { +// logger.info("发送短信开始..."); +// logger.info("couponInject:" + couponInject); +// String secret = wxMsgConfig.getSecret(); +// String bid = wxMsgConfig.getBid(); +// String publickey = wxMsgConfig.getPublickey(); +// +// String phone = record.getPhones(); +// String signature = record.getSignature(); +// String msg = record.getMsg(); +// String notifyUrl = wxMsgConfig.getNotifyurl(); +// WxMsgModel wxMsgModel = wxMsgModelMapper.selectByPrimaryKey(record.getModelId()); +// Integer modelId = null; +// if (wxMsgModel != null) { +// modelId = wxMsgModel.getModelId(); +// } +// logger.info("=============迈外迪API开始调用"); +// String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); +// logger.info("=============迈外迪API返回结果:" + result); +// JSONObject jsonObjectResult = JSONObject.parseObject(result); +// String ret = jsonObjectResult.get("ret").toString(); +// String batchNo = jsonObjectResult.get("data").toString(); +// String resultMsg = jsonObjectResult.get("msg").toString(); +// record.setReturnResult(jsonObjectResult.toJSONString()); +// +// +// if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { +// record.setSendstatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); +// } else { +// record.setSendstatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); +// } +// +// final IdWorker idWorker = IdWorker.get(); +// long id = idWorker.nextId(); +// WxMsg wxMsg = new WxMsg(); +// wxMsg.setTenantId(record.getTenantId()); +// wxMsg.setModelId(record.getModelId()); +// wxMsg.setMsg(record.getMsg()); +// wxMsg.setExpectSendNumber(record.getExpectSendNumber()); +// wxMsg.setPhones(record.getPhones()); +// wxMsg.setSignature(record.getSignature()); +// wxMsg.setIsright(record.getIsright()); +// wxMsg.setName(record.getName()); +// wxMsg.setSendstatus(record.getSendstatus()); +// wxMsg.setLabel(record.getLabel()); +// wxMsg.setStatus(record.getStatus()); +// wxMsg.setWay(record.getWay()); +// wxMsg.setId(id); +// String systemTime = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); +// wxMsg.setSendtime(systemTime); +// wxMsg.setCreatetime(DateUtils.stringToDate(systemTime, "yyyy-MM-dd HH:mm:ss")); +// //精准投放 +// if (couponInject != null) { +// wxMsg.setCouponInjectId(couponInject.getId()); +// } +// wxMsgMapper.insertSelective(wxMsg); +// +// logger.info("发送短信结束..."); +// if (ret.equals(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode().toString())) { +// addMsgCallback(wxMsg, batchNo); +// return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态", id); +// } else { +// return new ResultData(ErrorCode.MSG_SEND_INTERFACE_ERROR.getCode(), +// ErrorCode.MSG_SEND_INTERFACE_ERROR.getMessage() + ":" + resultMsg); +// } +// +// } + @Override public void addMsgCallback(WxMsg wxmsg, String batchNo) { logger.info("营销短信发送时主动添加回调记录开始..."); String phones = wxmsg.getPhones(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java index 0d94b07ae..e88e2f2d0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java @@ -42,66 +42,12 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic @Autowired WxMerchantBUserMapper wxMerchantBUserMapper; - @Autowired WxMerchantMapper wxMerchantMapper; @Autowired WxMsgCallbackMapper wxMsgCallbackMapper; - @Override - public ResultData sendWorkFlowNodify(WxMsgValidationcode wxMsgValidationcode,Map dynamicContentMap) { - //3、从短信配置中查询密钥 bid 等信息 - WxMsgConfig wxMsgConfig = new WxMsgConfig(); - wxMsgConfig.setTenantId(wxMsgValidationcode.getTenantId()); - List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); - if (wxMsgConfigs.size() == 0) new ResultData(ErrorCode.MSG_SEND_ERROR.getCode(),"发送失败"); - wxMsgConfig = wxMsgConfigs.get(0); - - WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); - wxMsgValidationcodeModel.setTenantId(wxMsgConfig.getTenantId()); - wxMsgValidationcodeModel.setType(wxMsgValidationcode.getType()); - wxMsgValidationcodeModel = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel).get(0); - wxMsgValidationcode.setSignature(wxMsgValidationcodeModel.getSignature()); - - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - // 验证码 - String phone = wxMsgValidationcode.getPhone(); - String signature = wxMsgValidationcode.getSignature(); - //替换内容 - String msg = wxMsgValidationcodeModel.getContent(); - for (Map.Entry entry : dynamicContentMap.entrySet()) { - msg = msg.replace("{"+entry.getKey()+"}", entry.getValue()); - } - -// wxMsgValidationcode.setCode(String.valueOf(code)); - wxMsgValidationcode.setMsg(msg); - - String notifyUrl = wxMsgConfig.getNotifyurl(); - Integer modelId = wxMsgValidationcodeModel.getModelId(); - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - String ret = jsonObjectResult.get("ret").toString(); - String batchNo = jsonObjectResult.get("data").toString(); - if (ret.equals("1")) { - final IdWorker idWorker = IdWorker.get(); - wxMsgValidationcode.setId(idWorker.nextId()); - long currentTime = System.currentTimeMillis() ; - Date createtime=new Date(currentTime); -// Integer minutes = wxMsgValidationcodeModel.getMinutes(); -// currentTime +=minutes*60*1000; -// Date expiredate=new Date(currentTime); -// wxMsgValidationcode.setExpiretime(expiredate); - wxMsgValidationcode.setCreatetime(createtime); - wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); - addMsgCallback(wxMsgValidationcode,batchNo); - return new ResultData(Result.SUCCESS,"发送成功"); - } - return new ResultData(ErrorCode.MSG_SEND_ERROR.getCode(),"发送失败"); - } - @Override public PageInfo listAsPage(WxMsgValidationcode record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMsgValidationcodeMapper.findList(record)); @@ -197,6 +143,7 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic } + @Override public void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo){ logger.info("验证码发送时主动添加回调记录开始..."); String phone = wxmsg.getPhone(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java new file mode 100644 index 000000000..c69a79acf --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -0,0 +1,330 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxOrderGroupMarketing; +import com.iformall.enums.EnumAppType; +import com.iformall.enums.EnumCouponStatus; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.enums.EnumRefundStatus; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.*; +import com.iformall.service.WxOrderGroupService; +import com.iformall.service.WxOrderService; +import com.iformall.service.WxRefundOrderService; +import com.iformall.utils.DateUtils; +import com.iformall.utils.RedisLock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author gongbiao + */ +@Service +public class WxOrderGroupServiceImpl implements WxOrderGroupService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxOrderGroupMapper wxOrderGroupMapper; + + @Autowired + WxOrderMapper wxOrderMapper; + + @Autowired + WxOrderService wxOrderService; + + @Autowired + WxCUserMapper wxCUserMapper; + + @Autowired + WxCouponMapper wxCouponMapper; + + @Autowired + WxMallMapper wxMallMapper; + + @Autowired + WxAppinfoMapper wxAppinfoMapper; + + @Autowired + WxRefundOrderService wxRefundOrderService; + + @Autowired + RedisLock redisLock; + + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public void createOrderGroup(WxOrder order, WxCoupon wxCoupon) { + Long orderGroupId = order.getOrderGroupId(); + Long notOrderGroupId = 0L; + //查看是否首次拼团,orderGroupId不等于0代表不是首次拼团,因为第二个加入的拼团者肯定有团单号 + if (!orderGroupId.equals(notOrderGroupId)) { + WxOrderGroup wxOrderGroup = new WxOrderGroup(); + wxOrderGroup.setId(orderGroupId); + wxOrderGroup.setUpdateDate(new Date()); + logger.info("非首次拼团,更新拼团信息"); + int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); + if (row == 0) { + logger.info(">>>>>>>>>>>>参团失败 修改订单状态后定时退款 团单号" + orderGroupId); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + wxOrderGroup = wxOrderGroupMapper.selectByPrimaryKey(orderGroupId); + Integer remainPeople = wxOrderGroup.getRemainPeople(); + int endPeople = 0; + wxOrderGroup.setStatus(remainPeople == endPeople ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); + wxOrderGroup.setUpdateDate(new Date()); + try { + wxOrderGroupMapper.updateByPrimaryKeySelective(wxOrderGroup); + } catch (Exception e) { + logger.error("更新拼团信息失败", e); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + //更新order + order.setOrderStatus(wxOrderGroup.getStatus()); + order.setPressEndDate(wxOrderGroup.getExpiredDate()); + order.setOrderGroupId(wxOrderGroup.getId()); + try { + wxOrderMapper.updateByPrimaryKey(order); + } catch (Exception e) { + logger.error("更新订单信息失败", e); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + if (remainPeople == endPeople) { + //得到所有拼团的order + WxOrder wxOrder = new WxOrder(); + wxOrder.setTenantId(order.getTenantId()); + wxOrder.setOrderGroupId(orderGroupId); + List list = wxOrderMapper.findList(wxOrder).parallelStream() + .filter(o -> { + return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + }).collect(Collectors.toList()); + for (WxOrder temp : list) { + try { + wxOrderService.couponOrderSuccess(temp); + } catch (Exception e) { + logger.error("创建COUPON_ORDER失败", e); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + } + } + } else { + logger.info("首次拼团,创建拼团信息"); + WxOrderGroup wxOrderGroup = new WxOrderGroup(); + final IdWorker idWorker = IdWorker.get(); + long groupId = idWorker.nextId(); + wxOrderGroup.setId(groupId); + wxOrderGroup.setTenantId(order.getTenantId()); + wxOrderGroup.setOrderId(order.getId()); + wxOrderGroup.setCouponId(wxCoupon.getId()); + wxOrderGroup.setRemainPeople(wxCoupon.getPressLimitNum() - 1); + wxOrderGroup.setUserId(order.getCUserId()); + Date date = new Date(); + wxOrderGroup.setCreateDate(date); + wxOrderGroup.setUpdateDate(date); + wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); + Date expiredDate = DateUtils.getHourTimeAfter(wxCoupon.getPressLimitHours(), new Date()); + if (expiredDate.after(wxCoupon.getValidEndDate())) { + expiredDate = wxCoupon.getValidEndDate(); + } + wxOrderGroup.setExpiredDate(expiredDate); + try { + wxOrderGroupMapper.insertSelective(wxOrderGroup); + } catch (Exception e) { + logger.error("创建拼团信息失败", e); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + //更新order + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); + order.setPressEndDate(expiredDate); + order.setOrderGroupId(groupId); + try { + wxOrderMapper.updateByPrimaryKeySelective(order); + } catch (Exception e) { + logger.error("更新订单信息失败", e); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + } + + } + + @Override + public ResultData queryRemainOne(WxOrderGroup wxOrderGroup, Long userId) { + //取过期时间最大的数据 + WxOrderGroup group = wxOrderGroupMapper.select(wxOrderGroup).parallelStream() + .filter(o -> !o.getUserId().equals(userId) && o.getExpiredDate().after(new Date())) + .max(Comparator.comparing(WxOrderGroup::getExpiredDate)) + .orElse(null); + if (group == null) { + return new ResultData(Result.SUCCESS, "查询成功", group); + } + Map result = wxOrderGroupMapper.queryRemainOne(group); + return new ResultData(Result.SUCCESS, "查询成功", result); + } + + @Override + public PageInfo> queryOrderGroup(WxOrder wxOrder, Integer pageIndex, Integer pageSize) { + PageHelper.startPage(pageIndex, pageSize); + List> result = wxOrderGroupMapper.queryOrderGroup(wxOrder); + //更新状态 + logger.info("更新状态:" + result); + updateOrderGroupStatus(result); + PageHelper.startPage(pageIndex, pageSize); + result = wxOrderGroupMapper.queryOrderGroup(wxOrder); + PageInfo> pageInfo = new PageInfo<>(result); + return pageInfo; + } + + private void updateOrderGroupStatus(List> result) { + for (Map group : result) { + WxOrderGroup wxOrderGroup = new WxOrderGroup(); + wxOrderGroup.setId((Long) group.get("orderGroupId")); + wxOrderGroup.setTenantId(group.get("tenantId").toString()); + wxOrderGroup.setCouponId((Long) group.get("couponId")); + wxOrderGroup.setOrderId((Long) group.get("orderId")); + updateGroupStatus(wxOrderGroup); + } + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData toOrderGroup(WxOrderGroup wxOrderGroup) { + WxOrder wxOrder = new WxOrder(); + wxOrder.setTenantId(wxOrderGroup.getTenantId()); + wxOrder.setId(wxOrderGroup.getOrderId()); + List> couponOrderGroupList = wxOrderGroupMapper.queryOrderGroup(wxOrder); + Map couponOrderGroup = couponOrderGroupList.get(0); + //商场地址 + WxMall wxMall = new WxMall(); + wxMall.setTenantId(wxOrderGroup.getTenantId()); + List list = wxMallMapper.findList(wxMall); + if (!list.isEmpty()) { + couponOrderGroup.put("addr", list.get(0).getAddr()); + } + //参团人员 + wxOrder = new WxOrder(); + wxOrder.setOrderGroupId(wxOrderGroup.getId()); + wxOrder.setTenantId(wxOrderGroup.getTenantId()); + List orderList = wxOrderMapper.select(wxOrder).parallelStream().filter(o -> { + return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()) || + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()) || + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); + }).sorted(Comparator.comparing(order -> order.getId())).collect(Collectors.toList()); + if (!orderList.isEmpty()) { + List userList = new ArrayList<>(); + for (WxOrder order : orderList) { + WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId()); + userList.add(user); + } + userList = userList.parallelStream().map(u -> { + WxCUser temp = new WxCUser(); + temp.setId(u.getId()); + temp.setNickName(u.getNickName()); + temp.setAvatarUrl(u.getAvatarUrl()); + return temp; + }).collect(Collectors.toList()); + couponOrderGroup.put("userList", userList); + } + return new ResultData(couponOrderGroup); + } + + @Override + public ResultData queryOrderGroupStatus(WxOrderGroup wxOrderGroup) { + updateGroupStatus(wxOrderGroup); + return toOrderGroup(wxOrderGroup); + } + + @Override + public ResultData queryAttendStatus(WxOrderGroup wxOrderGroup) { + WxOrder order = new WxOrder(); + order.setTenantId(wxOrderGroup.getTenantId()); + order.setCUserId(wxOrderGroup.getUserId()); + order.setOrderGroupId(wxOrderGroup.getId()); + long count = wxOrderMapper.select(order).parallelStream().filter(o -> { + return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + }).count(); + WxOrderGroup group = wxOrderGroupMapper.selectByPrimaryKey(wxOrderGroup.getId()); + Map result = new HashMap<>(2); + result.put("attend", count > 0 ? true : false); + result.put("status", group.getStatus()); + return new ResultData(result); + } + + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + @Override + public void updateGroupStatus(WxOrderGroup wxOrderGroup) { + Long id = wxOrderGroup.getId(); + WxOrderGroup group = wxOrderGroupMapper.selectByPrimaryKey(id); + if (group.getStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode())) { + WxCoupon wxCoupon = wxCouponMapper.selectByPrimaryKey(wxOrderGroup.getCouponId()); + Integer status = wxCoupon.getStatus(); + if (status.equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { + group.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); + returnMoney(group); + } + // 查看是否超时 + Date expiredDate = group.getExpiredDate(); + if (new Date().after(expiredDate)) { + group.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); + returnMoney(group); + } + } + } + + @Override + public List findList(WxOrderGroup group) { + return wxOrderGroupMapper.select(group); + } + + @Override + public PageInfo queryOrderGroupMarketingList(WxOrderGroupMarketing marketing, Integer pageIndex, Integer pageSize) { + PageHelper.startPage(pageIndex, pageSize); + List result = wxOrderGroupMapper.queryOrderGroupMarketingList(marketing); + PageInfo pageInfo = new PageInfo<>(result); + return pageInfo; + } + + public void returnMoney(WxOrderGroup group) { + //券失效或拼团超时 修改 拼团的状态 + wxOrderGroupMapper.updateByPrimaryKeySelective(group); + WxOrder order = new WxOrder(); + order.setTenantId(group.getTenantId()); + order.setOrderGroupId(group.getId()); + order.setOrderStatus(group.getStatus()); + wxOrderMapper.updateStatusByOrderGroupId(order); + //获取APP信息 + WxAppinfo appinfo = new WxAppinfo(); + appinfo.setTenantId(order.getTenantId()); + appinfo.setType(EnumAppType.C.getCode()); + appinfo = wxAppinfoMapper.findList(appinfo).get(0); + //退款流程 + WxOrder wxOrder = new WxOrder(); + wxOrder.setTenantId(group.getTenantId()); + wxOrder.setOrderGroupId(group.getId()); + List list = wxOrderMapper.findList(wxOrder); + for (WxOrder temp : list) { + if (temp.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()) + || temp.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode())) { + boolean has = wxRefundOrderService.hasRefundOrder(order.getId(), EnumRefundStatus.REFUND_SUCCESS.getCode()); + if (!has) { + //去库存 + wxOrderService.stockBack(temp); + wxRefundOrderService.returnMoney(appinfo, temp.getId()); + } + } + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 4b4031df2..2e1014317 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -173,6 +173,25 @@ public class WxOrderServiceImpl implements WxOrderService { // + couponOrder ---待使用 int countOrder = 0, countCouponOrder = 0; + //拼团 + if (counpon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { + try { + WxOrder orderQ = new WxOrder(); + orderQ.setTenantId(user.getTenantId()); + orderQ.setProductId(counpon.getId()); + orderQ.setType(EnumOrderType.COUPON.getCode()); + orderQ.setcUserId(user.getId()); + List statusS = new ArrayList<>(); + statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); + orderQ.setStatusS(statusS); + return wxOrderMapper.countList(orderQ); + } catch (Exception e) { + logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + } try { WxOrder orderQ = new WxOrder(); @@ -195,7 +214,7 @@ public class WxOrderServiceImpl implements WxOrderService { WxCouponOrder couponOrderQ = new WxCouponOrder(); couponOrderQ.setTenantId(user.getTenantId()); couponOrderQ.setCouponId(counpon.getId()); - couponOrderQ.setCUserId(user.getId()); + couponOrderQ.setcUserId(user.getId()); if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE)) couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); countCouponOrder = wxCouponOrderMapper.countList(couponOrderQ); @@ -243,15 +262,18 @@ public class WxOrderServiceImpl implements WxOrderService { try { + WxCoupon updateRecord = new WxCoupon(); + updateRecord.setId(coupon.getId()); + updateRecord.setRemainInventory(coupon.getRemainInventory() - 1); + updateRecord.setUpdateDate(new Date()); // 减库存 - wxCouponMapper.reduceInventory(coupon.getId(), 1); - //解锁 - redisLock.unlock(couponIdStr, timeStr); + wxCouponMapper.updateByPrimaryKeySelective(updateRecord); } catch (RuntimeException e) { - //解锁 - redisLock.unlock(couponIdStr, timeStr); logger.error("此券减库存失败, couponId: " + couponIdStr); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } finally { + //解锁 + redisLock.unlock(couponIdStr, timeStr); } } @@ -281,10 +303,13 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); } - coupon.setRemainInventory(coupon.getRemainInventory() + 1); + WxCoupon updateRecord = new WxCoupon(); + updateRecord.setId(coupon.getId()); + updateRecord.setRemainInventory(coupon.getRemainInventory() + 1); + updateRecord.setUpdateDate(new Date()); try { - wxCouponMapper.updateByPrimaryKeySelective(coupon); + wxCouponMapper.updateByPrimaryKeySelective(updateRecord); } catch (Exception e) { logger.error("数据库更新失败,库存+1失败, e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存恢复失败"); @@ -306,7 +331,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress) { + public WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId, boolean isPress, Long orderGroupId) { // 检查用户 if (user == null) { logger.error("用户不存在"); @@ -341,6 +366,11 @@ public class WxOrderServiceImpl implements WxOrderService { payment = coupon.getPrice(); } + if (orderGroupId == null && coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { + // 拼团券 初始是全价即面额 + payment = coupon.getPrice(); + } + final IdWorker idWorker = IdWorker.get(); Long orderNumber = idWorker.nextId(); @@ -369,6 +399,8 @@ public class WxOrderServiceImpl implements WxOrderService { record.setDetail(bodyStr); record.setCreateDate(curr); record.setUpdateDate(curr); + record.setOrderGroupId(orderGroupId); + if (isPress) { // 初始砍价信息 record.setPressCurrentNum(0); @@ -574,8 +606,9 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrder.setTenantId(user.getTenantId()); couponOrder.setCouponId(order.getProductId()); couponOrder.setCouponType(coupon.getType()); - couponOrder.setCUserId(user.getId()); + couponOrder.setcUserId(user.getId()); couponOrder.setOwnerId(user.getId()); + couponOrder.setAutoRefund(coupon.getAutoRefund()); couponOrder.setOrderId(order.getOrderNumber()); couponOrder.setExpiredTime(valid_date); if(!isCard) { @@ -617,7 +650,7 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount()); cardInfo.setCreateDate(curr); cardInfo.setUpdateDate(curr); - + cardInfo.setSupportTransfer(coupon.getSupportTransfer()); wxCardInfoMapper.insertSelective(cardInfo); } @@ -818,7 +851,12 @@ public class WxOrderServiceImpl implements WxOrderService { WxOrder updateT = new WxOrder(); updateT.setId(updateOrder.getId()); updateT.setPaymentTime(currentDate); - updateT.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + //拼团到此处为已完成状态 + if (updateOrder.getOrderGroupId().equals(0L)) { + updateT.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + } else { + updateT.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + } updateT.setUpdateDate(currentDate); int ret = 0; try { @@ -912,6 +950,33 @@ public class WxOrderServiceImpl implements WxOrderService { } break; } + case ORDER_STATUS_COOPERATING_OVERTIME: { + try { + stockBack(updateOrder); + } catch (Exception e) { + logger.error("库存+1失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + break; + } + case ORDER_STATUS_COOPERATING_CANCEL: { + try { + stockBack(updateOrder); + } catch (Exception e) { + logger.error("库存+1失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + break; + } + case ORDER_STATUS_COOPERATING_COMPLETE: { + try { + stockBack(updateOrder); + } catch (Exception e) { + logger.error("库存+1失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + break; + } } updateOrder.setOrderStatus(enumOrderStatus.getCode()); updateOrder.setUpdateDate(currentDate); @@ -925,6 +990,23 @@ public class WxOrderServiceImpl implements WxOrderService { return ret; } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void updateOrderStatus(WxOrder updateOrder) { + if (updateOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()) || + updateOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()) || + updateOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()) || + updateOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode())) { + try { + stockBack(updateOrder); + } catch (Exception e) { + logger.error("拼团库存+1失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + } + } + /** * 微信关闭订单 */ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index aea61cee8..03d557205 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -13,10 +13,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.pay.*; -import com.iformall.service.WxAppinfoService; -import com.iformall.service.WxCouponOrderService; -import com.iformall.service.WxOrderService; -import com.iformall.service.WxPayOrderService; +import com.iformall.service.*; import com.iformall.utils.BeanUtils; import com.iformall.utils.MapUtil; import com.iformall.utils.Utility; @@ -28,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; + import java.text.ParseException; import java.util.*; @@ -41,6 +39,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Autowired WxCUserMapper wxCUserMapper; + @Autowired + WxCUserService wxCUserService; + @Autowired WxPayAccountMapper wxPayAccountMapper; @@ -74,6 +75,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Autowired WxAppinfoService wxAppinfoService; + @Autowired + WxOrderGroupService wxOrderGroupService; + + JSONObject errorMap = JSON.parseObject("{" + "\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," + "\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"用户帐号余额不足\",\"resolution\":\"用户帐号余额不足,请用户充值或更换支付卡后再支付\"}," + @@ -738,7 +743,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if ("MICROPAY".equals(tradeType)) { handleMicroOrderPaySuccess(record, transactionId, openId, sub_is_subscribe); } else { - handleOrderPaySuccess(record, transactionId); + handleOrderPaySuccess(record, transactionId, EnumPayFrom.QUERY.getCode()); } return new ResultData(Result.SUCCESS, "订单支付成功", returnMap); } else if ("REFUND".equals(trade_state)) { @@ -1139,9 +1144,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { timeEnd = new Date(); } payOrder.setPayTimeEnd(timeEnd); + payOrder.setPayEndFrom(EnumPayFrom.CALLBACK.getCode()); // 处理支付成功 - handleOrderPaySuccess(payOrder, paramMap.get("transaction_id")); + handleOrderPaySuccess(payOrder, paramMap.get("transaction_id"), EnumPayFrom.CALLBACK.getCode()); logger.info("notify order, wxpay checksign success, paramMap:{}, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); SortedMap resultMap = new TreeMap(); resultMap.put("return_code", "SUCCESS"); @@ -1159,14 +1165,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return XmlUtil.getRequestXml(resultMap); } - @Override - public void callback(Map paramMap, EnumPayWay payWay) { - - } - @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void handleOrderPaySuccess(WxPayOrder record, String transactionId) { + public void handleOrderPaySuccess(WxPayOrder record, String transactionId, Integer from) { // from 0:callback, 1:query Date currentDate = new Date(); EnumPayStatus payStatus = EnumPayStatus.getEnum(record.getPayOrderStatus()); // 判断支付状态 @@ -1210,12 +1211,30 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); } - // 修改订单状态 - try { - wxOrderService.couponOrderSuccess(order); - } catch (Exception e) { - logger.error(e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); + + //如果是Coupon是团购类型创建拼团信息不创建COUPON_ORDER + //查询券的类型 + Long productId = order.getProductId(); + WxCoupon wxCoupon = wxCouponMapper.selectByPrimaryKey(productId); + Integer type = wxCoupon.getType(); + if (type.equals(EnumCouponType.COUPON_GROUP.getCode()) && wxCoupon.getSalePrice().equals(record.getPayAmount())) { + try { + wxOrderGroupService.createOrderGroup(order, wxCoupon); + } catch (Exception e) { + logger.error("参团失败" + e.getMessage()); + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); + order.setUpdateDate(new Date()); + wxOrderMapper.updateByPrimaryKeySelective(order); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); + } + } else { + // 修改订单状态 + try { + wxOrderService.couponOrderSuccess(order); + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); + } } /* @@ -1282,16 +1301,17 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } else { userQ.setIsSubscribe(EnumUserIsSubscribe.YES.getCode()); } - wxCUserMapper.insertSelective(userQ); + wxCUserService.saveOrUpdate(userQ); } else { userQ.setId(user1.getId()); userQ.setUpdateDate(curDate); + userQ.setLoginCount(user1.getLoginCount()); if ("N".equalsIgnoreCase(isSubscribe)) { userQ.setIsSubscribe(EnumUserIsSubscribe.NO.getCode()); } else { userQ.setIsSubscribe(EnumUserIsSubscribe.YES.getCode()); } - wxCUserMapper.updateByPrimaryKeySelective(userQ); + wxCUserService.saveOrUpdate(userQ); } record.setcUserId(userQ.getId()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java index 6ccb88227..0d394cc78 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java @@ -570,6 +570,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ record.setTransactionId(sharingOrderDto.getTransactionId()); record.setPayAmount(sharingOrderDto.getPayAmount()); record.setMerchantId(sharingOrderDto.getMerchantId()); + record.setOrderId(sharingOrderDto.getOrderId()); record.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_UNKNOWN.getCode()); record.setCreateTime(currentDate); record.setUpdateTime(currentDate); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java index bf6405479..b1dc1e93d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPropertyContractServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.impl; +import com.alibaba.fastjson.JSONArray; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; @@ -10,18 +11,22 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.service.WxFlowRecordService; import com.iformall.service.WxFlowService; import com.iformall.service.WxPropertyContractService; import com.iformall.utils.Constant; +import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - +import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; @@ -54,6 +59,9 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService @Autowired WxFlowService wxFlowService; + @Autowired + WxFlowRecordService wxFlowRecordService; + @Override public Map listAsPage(WxPropertyContract record, Integer pageIndex, Integer pageSize) { Object rentContractStatusInfo = getRentContractStatusInfo(record); @@ -95,13 +103,53 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } else { result.put("wxShops", Collections.EMPTY_LIST); } - return new ResultData(Result.SUCCESS, "查询成功", result); + //租赁费用欠缴 + WxRentContract wxRentContract = new WxRentContract(); + wxRentContract.setId(wxPropertyContract.getRentContractId()); + result.put("rentOweCount",wxRentContractMapper.queryOweCount(wxRentContract)); + //物业费用欠缴 + WxPropertyContract propertyContract = new WxPropertyContract(); + propertyContract.setId(id); + result.put("propertyOweCount",wxPropertyContractMapper.queryOweCount(propertyContract)); + //押金欠缴 + result.put("depositOweCount",wxBillPropertyDepositMapper.queryOweCount(propertyContract)); + //发起人备注 + WxFlowRecord wxFlowRecord = new WxFlowRecord(); + wxFlowRecord.setBusinessId(id); + wxFlowRecord.setStatus(EnumFlowRecordStatus.NEW.getCode()); + List flowRecordList = wxFlowRecordService.findList(wxFlowRecord); + if(!CollectionUtils.isEmpty(flowRecordList)){ + result.put("remark",flowRecordList.get(0).getRemark()); + } + +// //生成预览账单 +// if(wxPropertyContract.getReceivePeriod() != null && wxPropertyContract.getLease()!=null) { +// wxBillPropertyMapper.deletePreviewBill(wxPropertyContract); +// //重新生成 +// List billList = buildProperty(new WxMerchant(),wxPropertyContract,EnumIsPreview.YES.getCode()); +// wxPropertyContract.setPreviewBillRentList(billList); +// } + //查询预账单用于展示 + WxBillProperty wxBillRent = new WxBillProperty(); + wxBillRent.setPropertyContractId(id); + wxBillRent.setSortColumns(WxBillProperty.Field.Period_ASC); + wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); + List resultList = wxBillPropertyMapper.findList(wxBillRent); + wxPropertyContract.setPreviewBillRentList(resultList); + + return new ResultData(Result.SUCCESS, "查询成功", result); } @Override @Transactional(rollbackFor = {Exception.class}) public ResultData saveOrUpdate(WxPropertyContract record, Long userId,String userName) { + // 保存调整金额(预账单调整) + if(!CollectionUtils.isEmpty(record.getPreviewBillRentList())){ + for (WxBillProperty wxBillProperty:record.getPreviewBillRentList()) { + wxBillPropertyMapper.update(wxBillProperty); + } + } if (null == record.getShopId()) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "shopId不能为空"); @@ -154,7 +202,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } int dayType = record.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode()) ? Calendar.DAY_OF_MONTH : Calendar.MONTH; //保存物业合同信息 - String message = ""; + String message; if (record.getId() == null) { final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); @@ -177,12 +225,20 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService record.setCreatetime(date); record.setUpdatetime(date); record.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); + record.setApplyStatus(EnumRentContractAppStatus.DEFAULT.getCode()); try { wxPropertyContractMapper.insertSelective(record); } catch (Exception e) { logger.error("保存物业合同信息失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + + //生成预览账单 + wxBillPropertyMapper.deletePreviewBill(record); + //重新生成 + List billList = buildProperty(new WxMerchant(),userId,record,EnumIsPreview.YES.getCode()); + record.setPreviewBillRentList(billList); + message = "保存物业合同信息成功"; } else {//更新物业合同信息 WxPropertyContract wxPropertyContract = wxPropertyContractMapper.selectByPrimaryKey(record.getId()); @@ -213,12 +269,35 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService logger.error("更新物业合同信息失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + + //生成预览账单 + if(!wxPropertyContract.getReceivePeriod().equals(record.getReceivePeriod()) + ||!wxPropertyContract.getPrice().equals(record.getPrice()) + ||!wxPropertyContract.getDeposit().equals(record.getDeposit())){ + wxBillPropertyMapper.deletePreviewBill(record); + //重新生成 + wxPropertyContract.setPrice(record.getPrice()); + wxPropertyContract.setDeposit(record.getDeposit()); + wxPropertyContract.setReceivePeriod(record.getReceivePeriod()); + wxPropertyContract.setPayAccount(record.getPayAccount()); + List billList = buildProperty(new WxMerchant(),userId,wxPropertyContract,EnumIsPreview.YES.getCode()); + record.setPreviewBillRentList(billList); + }else{ + //查询预账单用于展示 + WxBillProperty wxBillRent = new WxBillProperty(); + wxBillRent.setPropertyContractId(record.getId()); + wxBillRent.setSortColumns(WxBillProperty.Field.Period_ASC); + wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); + List billList = wxBillPropertyMapper.findList(wxBillRent); + record.setPreviewBillRentList(billList); + } message = "更新物业合同信息成功"; } - try { - record.getFlowParams().put("businessId",record.getId().toString()); - wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); + //启动审批流 + if(!CollectionUtils.isEmpty(record.getFlowParams())) { + record.getFlowParams().put("businessId", record.getId().toString()); + wxFlowService.start(record.getFlowParams(), userId, userName, record.getTenantId()); // 合同状态改成待签约 WxPropertyContract updateRentContract = new WxPropertyContract(); @@ -226,9 +305,6 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); wxPropertyContractMapper.updateStatus(updateRentContract); logger.info("id:{},启动审批流成功",record.getId().toString()); - } catch (Exception e) { - logger.error("启动审批流失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.FLOW_FAIL.getCode(), "FLOW FAILD " + e.getMessage()); } return new ResultData(Result.SUCCESS, message, record); } @@ -251,35 +327,39 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService //wxBillProperty.setMerchantId(record.getMerchantId()); //List> billPropertyList = wxBillPropertyMapper.queryBillPropertyList(wxBillProperty); //if (billPropertyList.size() == 0) { + //预览账单改为正式,并写入商户id + WxBillProperty billProperty = new WxBillProperty(); + billProperty.setPropertyContractId(id); + billProperty.setIsPreview(EnumIsPreview.NO.getCode()); + billProperty.setMerchantId(record.getMerchantId()); + wxBillPropertyMapper.updatePreviewStatus(billProperty); + WxMerchant wxMerchant = new WxMerchant(); wxMerchant.setId(record.getMerchantId()); wxMerchant.setTenantId(record.getTenantId()); //物业账单 - buildProperty(wxMerchant); + //buildProperty(wxMerchant,null); //物业押金账单 - buildDeposit(wxMerchant); + buildDeposit(wxMerchant,id); //} } return new ResultData(Result.SUCCESS, "操作成功"); } @Transactional(rollbackFor = {Exception.class}) - public void buildDeposit(WxMerchant wxMerchant) { - WxPropertyContract wxPropertyContract = new WxPropertyContract(); - wxPropertyContract.setMerchantId(wxMerchant.getId()); - List list = wxPropertyContractMapper.findList(wxPropertyContract); - if (list.size() > 0) { - wxPropertyContract = list.get(0); + public void buildDeposit(WxMerchant wxMerchant,Long propertyContractId) { + WxPropertyContract wxPropertyContract = wxPropertyContractMapper.selectByPrimaryKey(propertyContractId); + if (wxPropertyContract != null) { //找到计租方式 int dayType = wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode()) ? Calendar.DAY_OF_MONTH : Calendar.MONTH; final IdWorker idWorker = IdWorker.get(); WxBillPropertyDeposit wxBillDeposit = new WxBillPropertyDeposit(); wxBillDeposit.setId(idWorker.nextId()); wxBillDeposit.setPropertyContractId(wxPropertyContract.getId()); - wxBillDeposit.setReceivePay(0); wxBillDeposit.setPay(0); int needpay = wxPropertyContract.getDeposit(); wxBillDeposit.setNeedPay(needpay); + wxBillDeposit.setReceivePay(needpay); wxBillDeposit.setOwe(needpay); Date date = new Date(); Calendar instance = Calendar.getInstance(); @@ -297,16 +377,8 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService instance.setTime(wxBillDeposit.getReceiveDate()); instance.add(dayType, wxPropertyContract.getLease()); wxBillDeposit.setEndtime(instance.getTime()); - //截止收租日在当前时间之前 - if (wxBillDeposit.getReceiveDate().before(date)) { - long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); - wxBillDeposit.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); - wxBillDeposit.setExpiredDay(day); - } else { - wxBillDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); - wxBillDeposit.setExpiredDay(0L); - } - + wxBillDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + wxBillDeposit.setExpiredDay(0L); wxBillDeposit.setTenantId(wxMerchant.getTenantId()); wxBillDeposit.setIsDel(0); wxBillDeposit.setMerchantId(wxMerchant.getId()); @@ -314,6 +386,7 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService wxBillDeposit.setCreatetime(date); wxBillDeposit.setUpdatetime(date); wxBillDeposit.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillDeposit.setRentShopType(wxPropertyContract.getRentShopType()); try { wxBillPropertyDepositMapper.insertSelective(wxBillDeposit); } catch (Exception e) { @@ -323,99 +396,183 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } } - @Transactional(rollbackFor = {Exception.class}) - public void buildProperty(WxMerchant wxMerchant) { - //根据商户ID找出合同 - WxPropertyContract wxPropertyContract = new WxPropertyContract(); - wxPropertyContract.setMerchantId(wxMerchant.getId()); - List list = wxPropertyContractMapper.findList(wxPropertyContract); - if (list.size() > 0) { - wxPropertyContract = list.get(0); - int dayType = wxPropertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_DAY.getCode()) ? Calendar.DAY_OF_MONTH : Calendar.MONTH; - int receivePeriod = wxPropertyContract.getReceivePeriod().intValue(); - Integer lease = wxPropertyContract.getLease(); - int extralease = lease % receivePeriod; - int extracount = extralease > 0 ? 1 : 0; - int paycount = lease / receivePeriod + extracount; - int index = paycount - 1; - final IdWorker idWorker = IdWorker.get(); - for (int i = 0; i < paycount; i++) { - WxBillProperty wxBillProperty = new WxBillProperty(); - wxBillProperty.setId(idWorker.nextId()); - wxBillProperty.setPropertyContractId(wxPropertyContract.getId()); - wxBillProperty.setReceivePay(0); - wxBillProperty.setPay(0); - - Date date = new Date(); - Calendar instance = Calendar.getInstance(); - instance.setTime(wxPropertyContract.getRentalStartDate()); - instance.add(dayType, receivePeriod * i); - instance.add(Calendar.DAY_OF_MONTH, -1); - Date time = instance.getTime(); - wxBillProperty.setReceiveDate(time); + public List buildRentMonth(WxMerchant wxMerchant, Long userId, WxPropertyContract wxPropertyContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price,Integer isPreview) { + String adjustRatio = wxPropertyContract.getAdjustRatio(); + List integers = JSONArray.parseArray(adjustRatio, Integer.class); + integers.add(0, 0); + int size = integers.size(); + int[] priceArr = new int[size]; + priceArr[0] = price; + double priceD = price; + for (int i = 1; i < size; i++) { + priceD = priceD + priceD * integers.get(i) / 10000.0; + priceArr[i] = new BigDecimal(priceD).setScale(0, RoundingMode.HALF_EVEN).intValue(); + } + int month = 12; + int divide = lease / month; + int mod = lease % month; + int[] leaseArr = new int[size]; + for (int i = 0; i < divide; i++) { + leaseArr[i] = month; + } + if (mod > 0) { + leaseArr[divide] = mod; + } + + int billcount = 0; + List resultList = new ArrayList<>(); + for (int i = 0; i < size; i++) { + Calendar instance = Calendar.getInstance(); + instance.setTime(rentalStartDate); + //开始时间 + instance.add(Calendar.MONTH, month * i); + Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxPropertyContract, userId, wxMerchant, billcount,isPreview); + List billRentList = (List)resultMap.get("billList"); + billcount = (Integer)resultMap.get("billcount"); + resultList.addAll(billRentList); + } + return resultList; + } + + public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxPropertyContract wxPropertyContract, Long userId, WxMerchant wxMerchant, int billcount,Integer isPreview) { + Map resultMap = new HashedMap(); + List resultList = new ArrayList<>(); + int extralease = lease % receivePeriod; + int extracount = extralease > 0 ? 1 : 0; + int paycount = lease / receivePeriod + extracount; + int index = paycount - 1; + final IdWorker idWorker = IdWorker.get(); + for (int i = 0; i < paycount; i++) { + WxBillProperty wxBillRent = new WxBillProperty(); + wxBillRent.setIsPreview(isPreview); + + wxBillRent.setId(idWorker.nextId()); + wxBillRent.setPropertyContractId(wxPropertyContract.getId()); + wxBillRent.setPay(0); + int needpay = price * receivePeriod; + + Date date = new Date(); + Calendar instance = Calendar.getInstance(); + instance.setTime(startdate); + instance.add(dayType, receivePeriod * i); + instance.add(Calendar.DAY_OF_MONTH, -1); + Date time = instance.getTime(); + wxBillRent.setReceiveDate(time); + + //账单开始时间 + instance.clear(); + instance.setTime(wxBillRent.getReceiveDate()); + instance.add(Calendar.DAY_OF_MONTH, 1); + wxBillRent.setStarttime(instance.getTime()); + //账单结束时间 + instance.clear(); + instance.setTime(wxBillRent.getStarttime()); + instance.add(dayType, receivePeriod); + instance.add(Calendar.DAY_OF_MONTH, -1); + wxBillRent.setEndtime(instance.getTime()); + if (extracount > 0 && i == index) { //账单开始时间 instance.clear(); - instance.setTime(wxBillProperty.getReceiveDate()); + instance.setTime(wxBillRent.getReceiveDate()); instance.add(Calendar.DAY_OF_MONTH, 1); - wxBillProperty.setStarttime(instance.getTime()); + wxBillRent.setStarttime(instance.getTime()); //账单结束时间 instance.clear(); - instance.setTime(wxBillProperty.getStarttime()); - instance.add(dayType, receivePeriod); + instance.setTime(wxBillRent.getStarttime()); + instance.add(dayType, extralease); instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillProperty.setEndtime(instance.getTime()); - int needpay = wxPropertyContract.getPrice() * receivePeriod; - if (extracount > 0 && i == index) { - //账单开始时间 - instance.clear(); - instance.setTime(wxBillProperty.getReceiveDate()); - instance.add(Calendar.DAY_OF_MONTH, 1); - wxBillProperty.setStarttime(instance.getTime()); - //账单结束时间 - instance.clear(); - instance.setTime(wxBillProperty.getStarttime()); - instance.add(dayType, extralease); - instance.add(Calendar.DAY_OF_MONTH, -1); - wxBillProperty.setEndtime(instance.getTime()); - needpay = wxPropertyContract.getPrice() * extralease; - } - wxBillProperty.setNeedPay(needpay); - wxBillProperty.setOwe(needpay); - //截止收租日在当前时间之前 - if (wxBillProperty.getReceiveDate().before(date)) { - long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); - wxBillProperty.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); - wxBillProperty.setExpiredDay(day); - } else {//截止收租日在当前时间之后 - Calendar now = Calendar.getInstance(); - now.add(dayType, receivePeriod); - Date currenttime = now.getTime(); - //当前日期加上周期后小于截止收租日就是没有到期,否则当前待缴 - if (currenttime.before(wxBillProperty.getReceiveDate())) { - wxBillProperty.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode()); - wxBillProperty.setExpiredDay(0L); - } else { - wxBillProperty.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); - wxBillProperty.setExpiredDay(0L); - } - } - wxBillProperty.setTenantId(wxMerchant.getTenantId()); - wxBillProperty.setIsDel(0); - wxBillProperty.setMerchantId(wxMerchant.getId()); - wxBillProperty.setShopId(wxPropertyContract.getShopId()); - wxBillProperty.setCreatetime(date); - wxBillProperty.setUpdatetime(date); - wxBillProperty.setIsDel(EnumDelStatus.NOT_DEL.getCode()); - try { - wxBillPropertyMapper.insertSelective(wxBillProperty); - } catch (Exception e) { - logger.error("添加物业账单失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + wxBillRent.setEndtime(instance.getTime()); + needpay = price * extralease; + } + wxBillRent.setNeedPay(needpay); + wxBillRent.setOwe(needpay); + wxBillRent.setReceivePay(needpay); + + //截止收租日在当前时间之前 + if (wxBillRent.getReceiveDate().before(date)) { + long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); + wxBillRent.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); + wxBillRent.setExpiredDay(day); + } else {//截止收租日在当前时间之后 + Calendar now = Calendar.getInstance(); + now.add(dayType, receivePeriod); + Date currenttime = now.getTime(); + //当前日期加上周期后小于截止收租日就是没有到期,否则当前待缴 + if (currenttime.before(wxBillRent.getReceiveDate())) { + wxBillRent.setStatus(EnumBillRentStatus.NOT_EXPIRED.getCode()); + wxBillRent.setExpiredDay(0L); + } else { + wxBillRent.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + wxBillRent.setExpiredDay(0L); } } + wxBillRent.setTenantId(wxMerchant.getTenantId()); + wxBillRent.setIsDel(0); + wxBillRent.setMerchantId(wxMerchant.getId()); + wxBillRent.setUserId(userId); + wxBillRent.setShopId(wxPropertyContract.getShopId()); + wxBillRent.setCreatetime(date); + wxBillRent.setUpdatetime(date); + wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode()); + wxBillRent.setRentShopType(wxPropertyContract.getRentShopType()); + wxBillRent.setPeriod(++billcount); + try { + wxBillPropertyMapper.insertSelective(wxBillRent); + resultList.add(wxBillRent); + } catch (Exception e) { + logger.error("添加租赁账单失败,e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } } + resultMap.put("billcount",billcount); + resultMap.put("billList",resultList); + return resultMap; + } + + /** + * 根据商户/指定物业合同生成物业账单 + * @param wxMerchant + * @param propertyContract + * @return + */ + @Transactional(rollbackFor = {Exception.class}) + public List buildProperty(WxMerchant wxMerchant,Long userId,WxPropertyContract propertyContract,Integer isPreview) { + List result = new ArrayList<>(); + + WxPropertyContract wxPropertyContract; + if(propertyContract == null){ + //根据商户ID找出合同 + wxPropertyContract = new WxPropertyContract(); + wxPropertyContract.setMerchantId(wxMerchant.getId()); + List list = wxPropertyContractMapper.findList(wxPropertyContract); + if (list.size() > 0) { + wxPropertyContract = list.get(0); + } + }else{ + wxPropertyContract = propertyContract; + } + + if (wxPropertyContract != null) { + int receivePeriod = wxPropertyContract.getReceivePeriod().intValue(); + Integer lease = wxPropertyContract.getLease(); + Date rentalStartDate = propertyContract.getRentalStartDate(); + Integer price = propertyContract.getPrice(); + + //按月计租 + if (propertyContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode())) { + result = buildRentMonth(wxMerchant, userId, propertyContract, receivePeriod, lease, rentalStartDate, price,isPreview); + } else { + //按日计租 + Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, propertyContract, userId, wxMerchant, 0,isPreview); + result = (List)resultMap.get("billList"); + } + } + for (int i = 0; i < result.size(); i++) { + result.get(i).setPeriod(i+1); + } + return result; } @@ -501,7 +658,8 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService Map params = new HashMap<>(); params.put("tenantId", record.getTenantId()); params.put("rentShopType", record.getRentShopType()); - return wxPropertyContractMapper.getRentContractList(params); + List contractList = wxPropertyContractMapper.getRentContractList(params); + return contractList; } @Override @@ -656,5 +814,4 @@ public class WxPropertyContractServiceImpl implements WxPropertyContractService } } - } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index b36725355..287b9a75f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -271,6 +271,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(wxCouponOrder.getOrderId()); + if (wxOrder == null) { + logger.error("订单ID不存在:" + couponOrderId); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } if (payType == EnumPayType.PAY_B_REFUND) { logger.info("B端发起退款: bUserId-" + bUserId); @@ -295,6 +299,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } else { logger.info("自己发起退款: cUserId-" + bUserId); } + if (wxOrder.getPayment() <= 0) { logger.error("订单支付金额小于等于0: " + wxOrder.toString()); throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); @@ -343,9 +348,9 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 } if (payType == EnumPayType.PAY_B_REFUND) { - wxCouponOrder.setBUserId(bUserId); + wxCouponOrder.setbUserId(bUserId); } else{ - wxCouponOrder.setBUserId(payType.getCode().longValue());//其他退款模式将退款方式存入BUSERID + wxCouponOrder.setbUserId(payType.getCode().longValue());//其他退款模式将退款方式存入BUSERID } wxCouponOrder.setUpdateDate(currentDate); try { @@ -484,7 +489,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.info("微信退款订单申请成功: " + returnMap.toString()); try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -502,7 +507,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setFailReason(errMsg); } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } else { @@ -563,7 +568,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.info("微信退款订单申请成功: " + returnMap.toString()); try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -581,7 +586,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setFailReason(errMsg); } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); } } @@ -622,7 +627,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -819,7 +824,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.info("微信退款订单申请成功: " + returnMap.toString()); try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -837,7 +842,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setFailReason(errMsg); } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } else { @@ -898,7 +903,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.info("微信退款订单申请成功: " + returnMap.toString()); try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -916,7 +921,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setFailReason(errMsg); } record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); } } @@ -957,7 +962,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } try { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); } catch (Exception e) { logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); @@ -987,7 +992,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { String refund_id = returnMap.get("refund_id"); return new ResultData(Result.SUCCESS, "退款", returnMap); } else { - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); String errMsg = ""; JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); if (errObj != null) { @@ -1019,7 +1024,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { errMsg = returnMap.get("return_msg"); record.setFailReason(errMsg); } - wxRefundOrderMapper.updateByPrimaryKey(record); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); } } @@ -1276,7 +1281,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { // 修改订单状态 try { - wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS); + //拼团 非0为拼团券 + if (!order.getOrderGroupId().equals(0L)) { + wxOrderService.updateOrderStatus(order); + } else { + wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS); + } } catch (Exception e) { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL); @@ -1326,4 +1336,244 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { wxRefundOrderMapper.deleteByPrimaryKey(id); } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public ResultData returnMoney(WxAppinfo appInfo, Long orderId) { + WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(orderId); + final IdWorker idWorker = IdWorker.get(); + Date currentDate = new Date(); +// wxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); +// wxOrder.setUpdateDate(currentDate); +// try { +// wxOrderMapper.updateByPrimaryKeySelective(wxOrder); +// } catch (Exception e) { +// logger.error("订单修改出错: " + e.getMessage()); +// throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单修改出错"); +// } + + // 查找支付订单 + WxPayOrder payOrderQ = new WxPayOrder(); + payOrderQ.setTenantId(appInfo.getTenantId()); + payOrderQ.setcUserId(wxOrder.getcUserId()); + payOrderQ.setOrderId(wxOrder.getId()); + payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + + WxPayOrder payOrder = null; + List list = wxPayOrderMapper.findList(payOrderQ); + if (list.size() > 0) { + if (list.size() > 1) { + logger.error("TODO: payOrder成功记录应该只有一条????!!!"); + } + logger.warn(""); + payOrder = list.get(0); + } + if (payOrder == null) { + logger.error("支付订单不存在(payOrder不存在)"); + return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND); + } + + WxRefundOrder record = new WxRefundOrder(); + record.setPayOrderNo(String.valueOf(payOrder.getId())); + record.setOrderId(orderId); + // 创建退款订单 + Long refundId = idWorker.nextId(); + String out_refund_id = String.valueOf(refundId); + + record.setId(refundId); + record.setTenantId(appInfo.getTenantId()); + record.setCreateTime(currentDate); + record.setUpdateTime(currentDate); + // 微信内部订单号 + record.setTransactionId(payOrder.getTransactionId()); + record.setCUserId(payOrder.getcUserId()); + record.setTotalFee(payOrder.getPayAmount()); + record.setRefundFee(payOrder.getPayAmount()); + record.setRefundTimeStart(currentDate); + record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); + + // 退款订单 + try { + int sqlRow = wxRefundOrderMapper.insertSelective(record); + if (sqlRow != 1) { + logger.error("退款订单数据库插入出错: " + record.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + } catch (Exception e) { + logger.error("退款订单数据库插入出错: " + record.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId()); + if (StringUtils.isBlank(payAccount.getApiKey())) { + logger.error("支付密钥为空"); + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(), "支付密钥为空,请联系商城管理员"); + } + if (StringUtils.isBlank(payAccount.getCertPath())) { + logger.error("证书路径为空"); + throw new MallinkException(ErrorCode.CERT_PATH_NOT_FOUND.getCode(), "证书路径为空,请联系商城管理员"); + } + if (!Utility.isFileExist(payAccount.getCertPath())) { + logger.error("证书文件不存在"); + throw new MallinkException(ErrorCode.CERT_PATH_NOT_FOUND.getCode(), "证书文件不存在,请联系商城管理员"); + } + // check 是否有退款订单 + List refundList = wxRefundOrderMapper.findList(record); + if (refundList.size() > 0) { + logger.error("退款订单已存在, 无法再提交退款申请"); + throw new MallinkException(ErrorCode.REFUND_ORDER_EXIST.getCode(), "退款订单已存在, 无法再提交退款申请"); + } + + // 实际支付 + // 向微信提交退款申请 + if (payAccount.getType().equals(EnumPayMode.MCH.getCode())) { + // 普通商户模式 + String noncestr = Utility.generate32UUID(); + WxRefundOrderP wxRefundOrderP = new WxRefundOrderP(); + wxRefundOrderP.setAppid(appInfo.getAppId()); + wxRefundOrderP.setMch_id(payAccount.getMchId()); + wxRefundOrderP.setNonce_str(noncestr); + // 微信内部订单号 + if (record.getTransactionId() != null) { + wxRefundOrderP.setTransaction_id(record.getTransactionId()); + } + // 支付订单号 + wxRefundOrderP.setOut_trade_no(payOrder.getPayOrderNo()); + // 退款支付订单号 + wxRefundOrderP.setOut_refund_no(out_refund_id); + wxRefundOrderP.setTotal_fee(record.getTotalFee()); + wxRefundOrderP.setRefund_fee(record.getRefundFee()); + wxRefundOrderP.setRefund_desc("拼团失败退款"); + wxRefundOrderP.setNotify_url(payAccount.getRefundNotifyUrl()); + + Map signMap = null; + try { + signMap = BeanUtils.toStringMap(wxRefundOrderP); + } catch (Exception e) { + logger.error("退款命令生辰: " + e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "退款签名异常"); + } + + String signAgent = WxPayment.createSign(signMap, payAccount.getApiKey()); + signMap.put("sign", signAgent); + String response = null; + try { + response = WxPay.orderRefund(signMap, payAccount.getCertPath(), payAccount.getMchId()); + } catch (Exception e) { + logger.error("退款异常: " + e.getMessage()); + throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "退款异常"); + } + logger.info("微信退款订单:" + wxRefundOrderP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + String result_no = returnMap.get("result_code"); + String refund_id = returnMap.get("refund_id"); + // 设置 微信退款订单号 + record.setRefundId(refund_id); + record.setRefundVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); + if ("SUCCESS".equals(result_no)) { + logger.info("微信退款订单申请成功: " + returnMap.toString()); + try { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } catch (Exception e) { + logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); + throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR); + } + } else { + logger.error("微信退款订单申请失败: " + response); + String errMsg = ""; + JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); + if (errObj != null) { + errMsg = errObj.toJSONString(); + record.setFailReason(errMsg); + } else { + errMsg = returnMap.get("return_msg"); + record.setFailReason(errMsg); + } + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); + return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg, returnMap); + } + } else { + // 服务商模式 + String noncestr = Utility.generate32UUID(); + WxRefundOrderSP wxRefundOrderSP = new WxRefundOrderSP(); + wxRefundOrderSP.setAppid(appInfo.getParentAppId()); + wxRefundOrderSP.setSub_appid(appInfo.getAppId()); + wxRefundOrderSP.setMch_id(payAccount.getMchId()); + wxRefundOrderSP.setSub_mch_id(payAccount.getSubMchId()); + wxRefundOrderSP.setNonce_str(noncestr); + // 微信内部订单号 + if (record.getTransactionId() != null) { + wxRefundOrderSP.setTransaction_id(record.getTransactionId()); + } + // 支付订单号 + wxRefundOrderSP.setOut_trade_no(payOrder.getPayOrderNo()); + // 退款支付订单号 + wxRefundOrderSP.setOut_refund_no(out_refund_id); + wxRefundOrderSP.setTotal_fee(record.getTotalFee()); + wxRefundOrderSP.setRefund_fee(record.getRefundFee()); + wxRefundOrderSP.setRefund_desc("拼团失败退款"); + wxRefundOrderSP.setNotify_url(payAccount.getRefundNotifyUrl()); + wxRefundOrderSP.setSign_type("HMAC-SHA256"); + + Map signMap = null; + try { + signMap = BeanUtils.toStringMap(wxRefundOrderSP); + } catch (Exception e) { + logger.error("退款命令生辰: " + e.getMessage()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "退款签名异常"); + } + + String signAgent = WxPayment.createSignHMAC(signMap, payAccount.getApiKey()); + signMap.put("sign", signAgent); + String response = null; + try { + response = WxPay.orderRefund(signMap, payAccount.getCertPath(), payAccount.getMchId()); + } catch (Exception e) { + logger.error("退款异常: " + e.getMessage()); + throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "退款异常"); + } + logger.info("微信退款订单:" + wxRefundOrderSP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + String result_no = returnMap.get("result_code"); + String refund_id = returnMap.get("refund_id"); + // 设置 微信退款订单号 + record.setRefundId(refund_id); + record.setRefundVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); + if ("SUCCESS".equals(result_no)) { + logger.info("微信退款订单申请成功: " + returnMap.toString()); + try { + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); + return new ResultData(Result.SUCCESS, "退款订单申请成功", returnMap); + } catch (Exception e) { + logger.error("微信退款订单更新入库出错: " + e.getMessage() + ", record: " + record.toString()); + throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "订单状态更新失败"); + } + } else { + logger.error("微信退款订单申请失败: " + response); + String errMsg = ""; + JSONObject errObj = errorRefundReqMap.getJSONObject(result_no); + if (errObj != null) { + errMsg = errObj.toJSONString(); + record.setFailReason(errMsg); + } else { + errMsg = returnMap.get("return_msg"); + record.setFailReason(errMsg); + } + record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_FAIL.getCode()); + wxRefundOrderMapper.updateByPrimaryKeySelective(record); + throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), errMsg); + } + } + } + + @Override + public boolean hasRefundOrder(Long orderId, Integer status) { + WxRefundOrder order = new WxRefundOrder(); + order.setOrderId(orderId); + order.setRefundOrderStatus(status); + return wxRefundOrderMapper.selectCount(order) > 0 ? true : false; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 68595ac65..0536cecf0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -12,12 +12,10 @@ import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; -import com.iformall.service.WxFlowRecordService; -import com.iformall.service.WxFlowService; -import com.iformall.service.WxMerchantService; -import com.iformall.service.WxRentContractService; +import com.iformall.service.*; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; +import org.apache.commons.collections.map.HashedMap; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; @@ -131,6 +129,32 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //设置审批流程状态 result.put("applyStatus", wxRentContract.getApplyStatus()); + + //租赁费用欠缴 + result.put("rentOweCount",wxRentContractMapper.queryOweCount(wxRentContract)); + //物业费用欠缴 + WxPropertyContract propertyContract = new WxPropertyContract(); + propertyContract.setRentContractId(id); + result.put("propertyOweCount",wxPropertyContractMapper.queryOweCount(propertyContract)); + //押金欠缴 + result.put("depositOweCount",wxBillDepositMapper.queryOweCount(wxRentContract)); + //发起人备注 + WxFlowRecord wxFlowRecord = new WxFlowRecord(); + wxFlowRecord.setBusinessId(id); + wxFlowRecord.setStatus(EnumFlowRecordStatus.NEW.getCode()); + List flowRecordList = wxFlowRecordService.findList(wxFlowRecord); + if(!CollectionUtils.isEmpty(flowRecordList)){ + result.put("remark",flowRecordList.get(0).getRemark()); + } + + //查询预账单用于展示 + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setRentContractId(id); + wxBillRent.setSortColumns(WxBillRent.Field.Period_ASC); + wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); + List resultList = wxBillRentMapper.findList(wxBillRent); + wxRentContract.setPreviewBillRentList(resultList); + return new ResultData(Result.SUCCESS, "查询成功", result); } @@ -187,61 +211,112 @@ public class WxRentContractServiceImpl implements WxRentContractService { if (count > 0) { return new ResultData(ErrorCode.RENT_CONTRACT_WITH_SHOP_IS_FOUND); } + record.setApplyStatus(EnumRentContractAppStatus.DEFAULT.getCode()); wxRentContractMapper.insertSelective(record); } catch (Exception e) { logger.error("保存租赁合同信息失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - try { - // 启动审批流 - if(record.getFlowParams() != null){ - record.getFlowParams().put("businessId",record.getId().toString()); - if(record.getMerchantId() != null) { - record.getFlowParams().put("supplement", true); //设置补录 - } - wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); - - // 合同状态改成待签约 - WxRentContract updateRentContract = new WxRentContract(); - updateRentContract.setId(record.getId()); - updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); - wxRentContractMapper.updateStatus(updateRentContract); - logger.info("id:{},启动审批流成功, 是否补录:{}",record.getId().toString(),record.getMerchantId() != null); + // 启动审批流 + if(record.getFlowParams() != null){ + record.getFlowParams().put("businessId",record.getId().toString()); + if(record.getMerchantId() != null) { + record.getFlowParams().put("supplement", true); //设置补录 } - } catch (Exception e) { - logger.error("启动审批流失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.FLOW_FAIL.getCode(), "FLOW FAILD " + e.getMessage()); + wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); + + // 合同状态改成待签约 + WxRentContract updateRentContract = new WxRentContract(); + updateRentContract.setId(record.getId()); + updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); + wxRentContractMapper.updateStatus(updateRentContract); + logger.info("id:{},启动审批流成功, 是否补录:{}",record.getId().toString(),record.getMerchantId() != null); } + //生成预览账单(补录第二步,第三步走编辑) + if(record.getReceivePeriod() != null && record.getLease()!=null && record.getPrice()!= null){ + wxBillRentMapper.deletePreviewBill(record); + //重新生成 + List resultList = buildRent(new WxMerchant(), null, record, EnumIsPreview.YES.getCode()); + record.setPreviewBillRentList(resultList); + } return new ResultData(Result.SUCCESS, "保存租赁合同信息成功", record); } @Transactional(rollbackFor = {Exception.class}) @Override public ResultData update(WxRentContract record, Long userId,String userName) { - ResultData resultData = getResultDataForUpdate(record, userId); - try { - // 启动审批流 - if(record.getFlowParams() != null){ - record.getFlowParams().put("businessId",record.getId().toString()); - if(record.getMerchantId() != null) { - record.getFlowParams().put("supplement", true); //设置补录 + //对比上一次,是否有更改,有,重新生成预账单 + WxRentContract dbRent = wxRentContractMapper.selectByPrimaryKey(record.getId()); + boolean change = false; + if(record.getReceivePeriod() != null && record.getLease()!=null && record.getPrice()!= null) { + if (record.getType().equals(EnumRentContractType.RENT_BY_AREA.getCode())) { + if (!record.getReceivePeriod().equals(dbRent.getReceivePeriod()) + || !record.getLease().equals(dbRent.getLease()) + || !record.getType().equals(dbRent.getType()) + || !record.getPrice().equals(dbRent.getPrice()) + || !record.getAdjustRatio().equals(dbRent.getAdjustRatio()) + ) { + change = true; + } + } else if (record.getType().equals(EnumRentContractType.RENT_BY_JOINT.getCode())) { + if (!record.getReceivePeriod().equals(dbRent.getReceivePeriod()) + || !record.getLease().equals(dbRent.getLease()) + || !record.getType().equals(dbRent.getType()) + || !record.getRevenue().equals(dbRent.getRevenue()) + || !record.getPayRatio().equals(dbRent.getPayRatio()) + ) { + change = true; + } + } else if (record.getType().equals(EnumRentContractType.RENT_BY_AREA_AND_JOINT.getCode())) { + if (!record.getReceivePeriod().equals(dbRent.getReceivePeriod()) + || !record.getLease().equals(dbRent.getLease()) + || !record.getType().equals(dbRent.getType()) + || !record.getPrice().equals(dbRent.getPrice()) + || !record.getPayRatio().equals(dbRent.getPayRatio()) + ) { + change = true; } - wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); - - // 合同状态改成待签约 - WxRentContract updateRentContract = new WxRentContract(); - updateRentContract.setId(record.getId()); - updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); - wxRentContractMapper.updateStatus(updateRentContract); - logger.info("id:{},启动审批流成功 ,是否补录:{}",record.getId().toString(),record.getMerchantId() != null); } - } catch (Exception e) { - logger.error("启动审批流失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.FLOW_FAIL.getCode(), "FLOW FAILD " + e.getMessage()); } - return resultData; + // 更新 + ResultData resultData = getResultDataForUpdate(record, userId); + + //有改变,删除预账单,重新生成 + List resultList; + if(change) { + wxBillRentMapper.deletePreviewBill(record); + resultList = buildRent(new WxMerchant(), null, record, EnumIsPreview.YES.getCode()); + }else{ + //查询预账单用于展示 + WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setRentContractId(record.getId()); + wxBillRent.setSortColumns(WxBillRent.Field.Period_ASC); + wxBillRent.setIsPreview(EnumIsPreview.YES.getCode()); + resultList = wxBillRentMapper.findList(wxBillRent); + } + + //启动审批流 + if(record.getFlowParams() != null){ + record.getFlowParams().put("businessId",record.getId().toString()); + if(record.getMerchantId() != null) { + record.getFlowParams().put("supplement", true); //设置补录 + } + wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); + + //合同状态改成待签约 + WxRentContract updateRentContract = new WxRentContract(); + updateRentContract.setId(record.getId()); + updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); + wxRentContractMapper.updateStatus(updateRentContract); + logger.info("id:{},启动审批流成功 ,是否补录:{}",record.getId().toString(),record.getMerchantId() != null); + } + + + WxRentContract wxRentContract = (WxRentContract)resultData.data; + wxRentContract.setPreviewBillRentList(resultList); + return new ResultData(wxRentContract); } public ResultData getResultDataForUpdate(WxRentContract record, Long userId) { @@ -304,19 +379,16 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Transactional(rollbackFor = {Exception.class}) @Override - public void buildDeposit(WxMerchant wxMerchant, Long userId) { - WxRentContract wxRentContract = new WxRentContract(); - wxRentContract.setMerchantId(wxMerchant.getId()); - List list = wxRentContractMapper.findList(wxRentContract); - if (list.size() > 0) { - wxRentContract = list.get(0); + public void buildDeposit(WxMerchant wxMerchant, Long userId,Long rentContractId) { + WxRentContract wxRentContract = wxRentContractMapper.selectByPrimaryKey(rentContractId); + if (wxRentContract != null) { final IdWorker idWorker = IdWorker.get(); WxBillDeposit wxBillDeposit = new WxBillDeposit(); wxBillDeposit.setId(idWorker.nextId()); wxBillDeposit.setRentContractId(wxRentContract.getId()); - wxBillDeposit.setReceivePay(0); wxBillDeposit.setPay(0); int needpay = wxRentContract.getDeposit(); + wxBillDeposit.setReceivePay(needpay); wxBillDeposit.setNeedPay(needpay); wxBillDeposit.setOwe(needpay); //找到计租方式 @@ -339,19 +411,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { instance.setTime(wxBillDeposit.getReceiveDate()); instance.add(dayType, wxRentContract.getLease()); wxBillDeposit.setEndtime(instance.getTime()); - - //截止收租日在当前时间之前 - if (wxBillDeposit.getReceiveDate().before(date)) { - long day = (time.getTime() - date.getTime()) / (24 * 60 * 60 * 1000); - wxBillDeposit.setStatus(EnumBillRentStatus.NOT_PAID.getCode()); - wxBillDeposit.setExpiredDay(day); - wxBillDeposit.setReceiveDate(time); - } else { - wxBillDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); - wxBillDeposit.setExpiredDay(0L); - wxBillDeposit.setReceiveDate(time); - } - + wxBillDeposit.setStatus(EnumBillRentStatus.WAIT_PAY.getCode()); + wxBillDeposit.setExpiredDay(0L); + wxBillDeposit.setReceiveDate(time); wxBillDeposit.setTenantId(wxMerchant.getTenantId()); wxBillDeposit.setIsDel(0); wxBillDeposit.setMerchantId(wxMerchant.getId()); @@ -372,29 +434,41 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Override @Transactional(rollbackFor = {Exception.class}) - public void buildRent(WxMerchant wxMerchant, Long userId) { - + public List buildRent(WxMerchant wxMerchant, Long userId,WxRentContract rentContract,Integer isPreview) { + List rentList = new ArrayList<>(); //根据商户ID找出合同 - WxRentContract wxRentContract = new WxRentContract(); - wxRentContract.setMerchantId(wxMerchant.getId()); - List list = wxRentContractMapper.findList(wxRentContract); - if (list.size() > 0) { - wxRentContract = list.get(0); + WxRentContract wxRentContract; + if(rentContract == null){ + wxRentContract = new WxRentContract(); + wxRentContract.setMerchantId(wxMerchant.getId()); + List list = wxRentContractMapper.findList(wxRentContract); + if (list.size() > 0) { + wxRentContract = list.get(0); + } + }else{ + wxRentContract = rentContract; + } + if (wxRentContract != null) { int receivePeriod = wxRentContract.getReceivePeriod().intValue(); Integer lease = wxRentContract.getLease(); Date rentalStartDate = wxRentContract.getRentalStartDate(); Integer price = wxRentContract.getPrice(); //按月计租 if (wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_MONTH.getCode())) { - buildRentMonth(wxMerchant, userId, wxRentContract, receivePeriod, lease, rentalStartDate, price); + rentList = buildRentMonth(wxMerchant, userId, wxRentContract, receivePeriod, lease, rentalStartDate, price,isPreview); } else { //按日计租 - buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant); + Map resultMap = buildRent(lease, receivePeriod, price, rentalStartDate, Calendar.DAY_OF_MONTH, wxRentContract, userId, wxMerchant, 0,isPreview); + rentList = ( List)resultMap.get("billList"); } } + for (int i = 0; i < rentList.size(); i++) { + rentList.get(i).setPeriod(i+1); + } + return rentList; } - public void buildRentMonth(WxMerchant wxMerchant, Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price) { + public List buildRentMonth(WxMerchant wxMerchant, Long userId, WxRentContract wxRentContract, int receivePeriod, Integer lease, Date rentalStartDate, Integer price,Integer isPreview) { String adjustRatio = wxRentContract.getAdjustRatio(); List integers = JSONArray.parseArray(adjustRatio, Integer.class); integers.add(0, 0); @@ -417,17 +491,24 @@ public class WxRentContractServiceImpl implements WxRentContractService { leaseArr[divide] = mod; } + int billcount = 0; + List resultList = new ArrayList<>(); for (int i = 0; i < size; i++) { Calendar instance = Calendar.getInstance(); instance.setTime(rentalStartDate); //开始时间 instance.add(Calendar.MONTH, month * i); - buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxRentContract, userId, wxMerchant); + Map resultMap = buildRent(leaseArr[i], receivePeriod, priceArr[i], instance.getTime(), Calendar.MONTH, wxRentContract, userId, wxMerchant, billcount,isPreview); + List billRentList = (List)resultMap.get("billList"); + billcount = (Integer)resultMap.get("billcount"); + resultList.addAll(billRentList); } + return resultList; } - public void buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant) { - + public Map buildRent(int lease, int receivePeriod, int price, Date startdate, int dayType, WxRentContract wxRentContract, Long userId, WxMerchant wxMerchant, int billcount,Integer isPreview) { + Map resultMap = new HashedMap(); + List resultList = new ArrayList<>(); int extralease = lease % receivePeriod; int extracount = extralease > 0 ? 1 : 0; int paycount = lease / receivePeriod + extracount; @@ -435,11 +516,15 @@ public class WxRentContractServiceImpl implements WxRentContractService { final IdWorker idWorker = IdWorker.get(); for (int i = 0; i < paycount; i++) { WxBillRent wxBillRent = new WxBillRent(); + wxBillRent.setIsPreview(isPreview); + wxBillRent.setId(idWorker.nextId()); wxBillRent.setRentContractId(wxRentContract.getId()); - wxBillRent.setReceivePay(0); wxBillRent.setPay(0); + System.out.println("-----------price:"+price+",receivePeriod:"+receivePeriod); int needpay = price * receivePeriod; + System.out.println("--------needpay:"+needpay); + Date date = new Date(); Calendar instance = Calendar.getInstance(); @@ -477,6 +562,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } wxBillRent.setNeedPay(needpay); wxBillRent.setOwe(needpay); + wxBillRent.setReceivePay(needpay); //截止收租日在当前时间之前 if (wxBillRent.getReceiveDate().before(date)) { @@ -506,14 +592,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { wxBillRent.setUpdatetime(date); wxBillRent.setIsDel(EnumDelStatus.NOT_DEL.getCode()); wxBillRent.setRentShopType(wxRentContract.getRentShopType()); + wxBillRent.setPeriod(++billcount); try { wxBillRentMapper.insertSelective(wxBillRent); + resultList.add(wxBillRent); } catch (Exception e) { logger.error("添加租赁账单失败,e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } } - + resultMap.put("billcount",billcount); + resultMap.put("billList",resultList); + return resultMap; } @@ -631,7 +721,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Override public PageInfo getRentContractList(WxRentContract rentContract, Integer pageIndex, Integer pageSize) { - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxRentContractMapper.getRentContractList(rentContract)); + PageInfo pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxRentContractMapper.getRentContractList(rentContract)); + return pageInfo; } public Map updateStatus(WxRentContract record) { @@ -831,26 +922,27 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Override @Transactional(rollbackFor = {Exception.class}) public ResultData updateFile(WxRentContract record, Long userId,String userName) { + // 保存调整金额(预账单调整) + if(!CollectionUtils.isEmpty(record.getPreviewBillRentList())){ + for (WxBillRent wxBillRent:record.getPreviewBillRentList()) { + wxBillRentMapper.update(wxBillRent); + } + } ResultData resultData = getResultDataForUpdate(record, userId); - try { - // 启动审批流 - if(record.getFlowParams() != null){ - record.getFlowParams().put("businessId",record.getId().toString()); - if(record.getMerchantId() != null) { - record.getFlowParams().put("supplement", true); //设置补录 - } - wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); - - // 合同状态改成待签约 - WxRentContract updateRentContract = new WxRentContract(); - updateRentContract.setId(record.getId()); - updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); - wxRentContractMapper.updateStatus(updateRentContract); - logger.info("id:{},启动审批流成功,是否补录:{}",record.getId().toString(),record.getMerchantId() != null); + // 启动审批流 + if(record.getFlowParams() != null){ + record.getFlowParams().put("businessId",record.getId().toString()); + if(record.getMerchantId() != null) { + record.getFlowParams().put("supplement", true); //设置补录 } - } catch (Exception e) { - logger.error("启动审批流失败,e:" + e.getMessage()); - throw new MallinkException(ErrorCode.FLOW_FAIL.getCode(), "FLOW FAILD " + e.getMessage()); + wxFlowService.start(record.getFlowParams(),userId,userName,record.getTenantId()); + + // 合同状态改成待签约 + WxRentContract updateRentContract = new WxRentContract(); + updateRentContract.setId(record.getId()); + updateRentContract.setStatus(EnumRentContractStatus.WAIT_SIGN.getCode()); + wxRentContractMapper.updateStatus(updateRentContract); + logger.info("id:{},启动审批流成功,是否补录:{}",record.getId().toString(),record.getMerchantId() != null); } return resultData; } @@ -875,16 +967,24 @@ public class WxRentContractServiceImpl implements WxRentContractService { record.getPrice() > 0) { WxBillRent wxBillRent = new WxBillRent(); wxBillRent.setMerchantId(record.getMerchantId()); - List> billRentList = wxBillRentMapper.queryBillRentList(wxBillRent); - if (billRentList.size() == 0) { + + //预览账单改为正式,并写入商户id + WxBillRent billRent = new WxBillRent(); + billRent.setRentContractId(id); + billRent.setIsPreview(EnumIsPreview.NO.getCode()); + billRent.setMerchantId(record.getMerchantId()); + wxBillRentMapper.updatePreviewStatus(billRent); + +// List> billRentList = wxBillRentMapper.queryBillRentList(wxBillRent); +// if (billRentList.size() == 0) { WxMerchant wxMerchant = new WxMerchant(); wxMerchant.setId(record.getMerchantId()); wxMerchant.setTenantId(record.getTenantId()); //租金 - buildRent(wxMerchant, null); +// buildRent(wxMerchant, null,null); //押金 - buildDeposit(wxMerchant, null); - } + buildDeposit(wxMerchant, null,id); +// } } return new ResultData(Result.SUCCESS, "操作成功"); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java index b7155b1e6..d45ae2d04 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java @@ -143,7 +143,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { if (!list.isEmpty()) { wxCUser = list.get(0); wxCUser.setScore(scoreNumber); - wxCUserMapper.updateByPrimaryKeySelective(wxCUser); + wxCUserService.saveOrUpdate(wxCUser); } } } @@ -163,7 +163,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { WxCUser wxCUser = new WxCUser(); wxCUser.setId(user.getId()); wxCUser.setScore(user.getPoins()); - wxCUserMapper.updateByPrimaryKeySelective(wxCUser); + wxCUserService.saveOrUpdate(wxCUser); } } @@ -351,7 +351,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { wxCUser.setTenantId(userInfo.getTenantId()); wxCUser.setPhone(userInfo.getPhone()); wxCUser.setScore(score); - wxCUserMapper.updateByPrimaryKeySelective(wxCUser); + wxCUserService.saveOrUpdate(wxCUser);; } // 2. 记录历史 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java new file mode 100644 index 000000000..97a156407 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxScreenAdServiceImpl.java @@ -0,0 +1,183 @@ +package com.iformall.service.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; + +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxCampaign; +import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxScreenAd; +import com.iformall.domain.vo.WxCouponCVo; +import com.iformall.enums.EnumScreenAdType; +import com.iformall.mapper.WxCampaignMapper; +import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxScreenAdMapper; +import com.iformall.service.WxAppinfoService; +import com.iformall.service.WxScreenAdService; +import com.iformall.utils.MaUtil; +import me.chanjar.weixin.common.error.WxErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Service +public class WxScreenAdServiceImpl implements WxScreenAdService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxScreenAdMapper wxScreenAdMapper; + + @Autowired + WxAppinfoService wxAppinfoService; + + @Autowired + WxCouponChannelMapper wxCouponChannelMapper; + + @Autowired + WxCampaignMapper wxCampaignMapper; + + @Override + public PageInfo listAsPage(WxScreenAd record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxScreenAdMapper.findList(record)); + } + + @Override + public WxScreenAd getById(Long id) { + return wxScreenAdMapper.selectByPrimaryKey(id); + } + + @Override + public ResultData saveOrUpdate(WxScreenAd record) { + if (record.getId() == null) { + if (record.getType() == null || record.getTargetId() == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } + if (record.getType().equals(EnumScreenAdType.COUPON.getCode())) { + + WxCouponCVo wxCouponCVo = wxCouponChannelMapper.findVoDetail(record.getTargetId()); + if (wxCouponCVo == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + record.setCoverImg(wxCouponCVo.getCoverImg()); + record.setSubType(wxCouponCVo.getTargetAd()); + record.setTitle(wxCouponCVo.getTitle()); + + } else if (record.getType().equals(EnumScreenAdType.COUPON.getCode())){ + WxCampaign wxCampaign = wxCampaignMapper.selectByPrimaryKey(record.getTargetId()); + if (wxCampaign == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + record.setCoverImg(wxCampaign.getCoverImg()); + record.setTitle(wxCampaign.getTitle()); + } + + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateDate(new Date()); + record.setUpdateDate(new Date()); + setQrcode(record); + if (record.getQrcode() == null) + return new ResultData(ErrorCode.DEVICE_QRCODE_GET_FAILED); + + wxScreenAdMapper.insertSelective(record); + + } else { + record.setUpdateDate(new Date()); + setQrcode(record); + wxScreenAdMapper.updateByPrimaryKeySelective(record); + } + return new ResultData(); + } + + @Override + public void deleteById(Long id) { + wxScreenAdMapper.deleteByPrimaryKey(id); + } + + @Override + public List findList(WxScreenAd wxTagsType) { + return wxScreenAdMapper.findList(wxTagsType); + } + + + @Override + public void updateStatusByCouponChannelId(Long couponChannelId, String tenantId, int status) { + WxScreenAd wxScreenAd = new WxScreenAd(); + wxScreenAd.setTenantId(tenantId); + wxScreenAd.setStatus(status); + wxScreenAd.setTargetId(couponChannelId); + wxScreenAd.setUpdateDate(new Date()); + wxScreenAdMapper.updateStatusByCouponChannelId(wxScreenAd); + } + + @Override + public void updateStatusByCouponId(Long couponId, String tenantId, int status) { + + WxCouponChannel wxCouponChannel = new WxCouponChannel(); + wxCouponChannel.setTenantId(tenantId); + wxCouponChannel.setCouponId(couponId); + + List list = wxCouponChannelMapper.findList(wxCouponChannel); + + list.stream().forEach(cc->{ + WxScreenAd wxScreenAd = new WxScreenAd(); + wxScreenAd.setTenantId(tenantId); + wxScreenAd.setStatus(status); + wxScreenAd.setTargetId(cc.getId()); + wxScreenAd.setUpdateDate(new Date()); + wxScreenAdMapper.updateStatusByCouponChannelId(wxScreenAd); + }); + } + + + private void setQrcode(WxScreenAd record){ + if (record.getTargetId() != null && + record.getType() != null && + record.getTenantId() != null) + try { + record.setQrcode(getQrcode(record.getTargetId(), + record.getType().intValue(), + wxAppinfoService.getCAppInfo(record.getTenantId()))); + }catch (Exception e) { + logger.error("QRCODE set Error:"+e.getMessage()); + } + } + + private static int QRCODE_WIDTH = 300; + private static String QRCODE_PAGE_HOME = "pages/index/index"; + private static boolean QRCODE_AUTO_COLOR = false; + private static boolean QRCODE_IS_HYALINE = false; + //private static int QRCODE_LINCOLOR =; + + private static String QRCODE_JUMP_CMD_HOME = "JH"; + private static String QRCODE_JUMP_CMD_COUPON = "JC"; + private static String QRCODE_JUMP_CMD_CAMPGIN = "JB"; + private byte[] getQrcode(Long id, int type, WxAppinfo appInfo) throws Exception { + if(appInfo == null) { + logger.error("QRCODE get error: appinfo is null"); + return null; + } + WxMaService wxMaService = MaUtil.getWeappService(appInfo); + + String scene = ""; + if (EnumScreenAdType.COUPON.getCode().equals(type)) + scene = QRCODE_JUMP_CMD_COUPON+":"+id.toString(); + else if (EnumScreenAdType.CAMPAIGN.getCode().equals(type)) + scene = QRCODE_JUMP_CMD_CAMPGIN+":"+id.toString(); + else + scene = QRCODE_JUMP_CMD_HOME+":"+"0"; + + try { + return wxMaService.getQrcodeService().createWxaCodeUnlimitBytes(scene, QRCODE_PAGE_HOME, QRCODE_WIDTH, QRCODE_AUTO_COLOR, null, QRCODE_IS_HYALINE); + }catch (WxErrorException e) { + logger.error("QRCODE get error: " + e.getMessage()); + } + return null; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java index 3db7d7d45..3466c954c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxShopServiceImpl.java @@ -1,20 +1,29 @@ package com.iformall.service.impl; +import java.io.*; import java.util.*; - import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxShop; -import com.iformall.enums.EnumShopStatus; +import com.iformall.enums.*; import com.iformall.mapper.WxShopMapper; import com.iformall.service.WxShopService; +import com.iformall.utils.Constant; +import com.iformall.utils.DownFileUtil; +import org.apache.commons.io.FileUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.common.IdWorker; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; @Service public class WxShopServiceImpl implements WxShopService { @@ -23,7 +32,6 @@ public class WxShopServiceImpl implements WxShopService { @Autowired WxShopMapper wxShopMapper; - @Override public PageInfo listAsPage(WxShop record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxShopMapper.findList(record)); @@ -34,7 +42,6 @@ public class WxShopServiceImpl implements WxShopService { PageHelper.startPage(pageIndex, pageSize); List> shops = wxShopMapper.findListMap(record); PageInfo> pageInfo = new PageInfo<>(shops); - return pageInfo; } @@ -103,4 +110,132 @@ public class WxShopServiceImpl implements WxShopService { return pageInfo; } + @Override + public void exportShop(WxShop wxShop, HttpServletRequest request, HttpServletResponse response) { + List> shopList = wxShopMapper.findListWithMerchantMap(wxShop); + + SXSSFWorkbook workbook; + String filepath = Constant.fileDirectory; + File savefile = new File(filepath); + if (!savefile.exists()) { + savefile.mkdirs(); + } + String filename = UUID.randomUUID() + ".xlsx"; + filepath = filepath + filename; + + try { + File file = new File(filepath); + workbook = new SXSSFWorkbook(100); + String sheetName = EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"店铺列表":"多经点位列表"; + SXSSFSheet sheetTwo = workbook.createSheet(sheetName); + Row rowtwo = sheetTwo.createRow(0); + + Cell cell1,cell2,cell3,cell4,cell5,cell6,cell7,cell8,cell9,cell10,cell11; + if(EnumRentShopType.POINT.getCode().equals(wxShop.getType())){ + Cell cell0 = rowtwo.createCell(0); + cell0.setCellValue("多经点位类型"); + cell1 = rowtwo.createCell(1); + cell2 = rowtwo.createCell(2); + cell3 = rowtwo.createCell(3); + cell4 = rowtwo.createCell(4); + cell5 = rowtwo.createCell(5); + cell6 = rowtwo.createCell(6); + cell7 = rowtwo.createCell(7); + cell8 = rowtwo.createCell(8); + cell9 = rowtwo.createCell(9); + cell10 = rowtwo.createCell(10); + cell11 = rowtwo.createCell(11); + }else{ + cell1 = rowtwo.createCell(0); + cell2 = rowtwo.createCell(1); + cell3 = rowtwo.createCell(2); + cell4 = rowtwo.createCell(3); + cell5 = rowtwo.createCell(4); + cell6 = rowtwo.createCell(5); + cell7 = rowtwo.createCell(6); + cell8 = rowtwo.createCell(7); + cell9 = rowtwo.createCell(8); + cell10 = rowtwo.createCell(9); + cell11 = rowtwo.createCell(10); + } + + cell1.setCellValue(EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"商铺号":"多经点位号"); + cell2.setCellValue("租赁商户"); + cell3.setCellValue("楼层"); + cell4.setCellValue("楼座"); + cell5.setCellValue("建筑面积(㎡)"); + cell6.setCellValue("计租面积(㎡)"); + cell7.setCellValue(EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"商铺状态":"多经点位状态"); + // 商户信息 + cell8.setCellValue("经营业态"); + cell9.setCellValue("品牌"); + cell10.setCellValue("负责人"); + cell11.setCellValue("负责人电话"); + + for (int i = 0; i < shopList.size(); i++) { + rowtwo = sheetTwo.createRow(i + 1); + Map entity = shopList.get(i); + + if(EnumRentShopType.POINT.getCode().equals(wxShop.getType())){ + Cell cell0 = rowtwo.createCell(0); + if (entity.get("pointType") != null) { + cell0.setCellValue(EnumPointType.getEnum((Integer) entity.get("pointType")).getMessage()); + } + cell1 = rowtwo.createCell(1); + cell2 = rowtwo.createCell(2); + cell3 = rowtwo.createCell(3); + cell4 = rowtwo.createCell(4); + cell5 = rowtwo.createCell(5); + cell6 = rowtwo.createCell(6); + cell7 = rowtwo.createCell(7); + cell8 = rowtwo.createCell(8); + cell9 = rowtwo.createCell(9); + cell10 = rowtwo.createCell(10); + cell11 = rowtwo.createCell(11); + }else{ + cell1 = rowtwo.createCell(0); + cell2 = rowtwo.createCell(1); + cell3 = rowtwo.createCell(2); + cell4 = rowtwo.createCell(3); + cell5 = rowtwo.createCell(4); + cell6 = rowtwo.createCell(5); + cell7 = rowtwo.createCell(6); + cell8 = rowtwo.createCell(7); + cell9 = rowtwo.createCell(8); + cell10 = rowtwo.createCell(9); + cell11 = rowtwo.createCell(10); + } + cell1.setCellValue((String)entity.get("shopNumber")); + cell2.setCellValue((String)entity.get("merchantName")); + cell3.setCellValue((String)entity.get("floor")); + cell4.setCellValue((String)entity.get("building")); + cell5.setCellValue((String)entity.get("buildArea")); + cell6.setCellValue((String)entity.get("operationArea")); + if(entity.get("status") != null) { + if(EnumShopStatus.RENT.getCode().equals(entity.get("status"))) { + cell7.setCellValue("已出租"); + // 查询商户信息 + cell8.setCellValue((String)entity.get("title")); + cell9.setCellValue((String)entity.get("brand")); + cell10.setCellValue((String)entity.get("link_person")); + cell11.setCellValue((String)entity.get("link_phone")); + }else{ + cell7.setCellValue("未出租"); + } + } + } + + FileOutputStream fileOut = new FileOutputStream(file); + workbook.write(fileOut); + fileOut.close(); + workbook.close(); + String name = EnumRentShopType.SHOP.getCode().equals(wxShop.getType())?"店铺列表":"多经点位列表"; + DownFileUtil.downFile(filepath,name+".xlsx",response, request); + FileUtils.forceDelete(file); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxTemplateMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxTemplateMsgServiceImpl.java index c3e0746f2..0376b3bd7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxTemplateMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxTemplateMsgServiceImpl.java @@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.common.IdWorker; +import java.util.Date; + @Service public class WxTemplateMsgServiceImpl implements WxTemplateMsgService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -29,14 +31,23 @@ public class WxTemplateMsgServiceImpl implements WxTemplateMsgService { return wxTemplateMsgMapper.selectByPrimaryKey(id); } + @Override + public WxTemplateMsg getByObj(WxTemplateMsg record) { + return wxTemplateMsgMapper.selectOne(record); + } + @Override public void saveOrUpdate(WxTemplateMsg record) { + Date curDate = new Date(); if (record.getId() == null) { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); + record.setCreateDate(curDate); + record.setUpdateDate(curDate); wxTemplateMsgMapper.insertSelective(record); } else { + record.setUpdateDate(curDate); wxTemplateMsgMapper.updateByPrimaryKeySelective(record); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxUserCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxUserCouponServiceImpl.java index b3f623816..46d33524c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxUserCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxUserCouponServiceImpl.java @@ -39,7 +39,7 @@ public class WxUserCouponServiceImpl implements WxUserCouponService { List wxUserCoupons = new ArrayList<>(); //查询订单表 WxCouponOrder wxCouponOrder = new WxCouponOrder(); - wxCouponOrder.setCUserId(userId); + wxCouponOrder.setcUserId(userId); wxCouponOrder.setCouponOrderStatus(status);//状态:0,待使用 1,已核销 2,已过期 3,已退款 List wxCouponOrders = wxCouponOrderMapper.findList(wxCouponOrder); if(wxCouponOrders.isEmpty()){ @@ -58,7 +58,7 @@ public class WxUserCouponServiceImpl implements WxUserCouponService { public WxUserCouponDto getWxUserCoupon(WxCouponOrder wxCouponOrder, WxCoupon wxCoupon){ WxUserCouponDto wxUserCoupon = new WxUserCouponDto(); wxUserCoupon.setOrderId(wxCouponOrder.getId()); - wxUserCoupon.setcUserId(wxCouponOrder.getCUserId()); + wxUserCoupon.setcUserId(wxCouponOrder.getcUserId()); wxUserCoupon.setCouponStatus(wxCouponOrder.getCouponOrderStatus()); wxUserCoupon.setCouponId(wxCouponOrder.getCouponId()); wxUserCoupon.setValidDate(wxCouponOrder.getExpiredTime()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java index d0dc48b9e..86f32abaa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java @@ -26,6 +26,11 @@ public class WxUserVisitServiceImpl implements WxUserVisitService { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxUserVisitMapper.findList(record)); } + @Override + public List getList(WxUserVisit record) { + return wxUserVisitMapper.findList(record); + } + @Override public WxUserVisit getById(Long id) { return wxUserVisitMapper.selectByPrimaryKey(id); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxWeappAuditStatusServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappAuditStatusServiceImpl.java new file mode 100644 index 000000000..878fcb95a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappAuditStatusServiceImpl.java @@ -0,0 +1,77 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxWeappAuditStatus; +import com.iformall.domain.vo.WxWeappAuditStatusVo; +import com.iformall.mapper.WxWeappAuditStatusMapper; +import com.iformall.service.WxWeappAuditStatusService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +public class WxWeappAuditStatusServiceImpl implements WxWeappAuditStatusService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxWeappAuditStatusMapper weappAuditStatusMapper; + + + @Override + public PageInfo listAsPage(WxWeappAuditStatusVo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> weappAuditStatusMapper.findVoList(record)); + } + + @Override + public List getList(WxWeappAuditStatusVo record) { + return weappAuditStatusMapper.findVoList(record); + } + + @Override + public List getVersionList(Integer type, Integer auditStatus) { + return weappAuditStatusMapper.findUserVersions(type, auditStatus); + } + + @Override + public WxWeappAuditStatus getById(Long id) { + return weappAuditStatusMapper.selectByPrimaryKey(id); + } + + @Override + public WxWeappAuditStatus getByAppId(String appId) { + WxWeappAuditStatus statusQ = new WxWeappAuditStatus(); + statusQ.setAppId(appId); + return weappAuditStatusMapper.selectOne(statusQ); + } + + @Override + public void saveStatus(WxWeappAuditStatus record) { + logger.info("AUDIT: " + record.toString()); + weappAuditStatusMapper.insertSelective(record); + } + + @Override + public void updateStatus(WxWeappAuditStatus record) { + logger.info("AUDIT: " + record.toString()); + weappAuditStatusMapper.updateByPrimaryKeySelective(record); + } + + @Override + public void deleteById(Long id) { + weappAuditStatusMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxWeappBasicSetServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappBasicSetServiceImpl.java new file mode 100644 index 000000000..87c23a0be --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappBasicSetServiceImpl.java @@ -0,0 +1,59 @@ +package com.iformall.service.impl; + +import java.util.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappBasicSet; +import com.iformall.mapper.WxWeappBasicSetMapper; +import com.iformall.service.WxWeappBasicSetService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class WxWeappBasicSetServiceImpl implements WxWeappBasicSetService { + + @Autowired + WxWeappBasicSetMapper wxWeappBasicSetMapper; + + + @Override + public PageInfo listAsPage(WxWeappBasicSet record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxWeappBasicSetMapper.findList(record)); + } + + @Override + public WxWeappBasicSet getById(Long id) { + return wxWeappBasicSetMapper.selectByPrimaryKey(id); + } + + @Override + public WxWeappBasicSet getByTypeAndDeploy(WxWeappBasicSet weappBasicSet) { + return wxWeappBasicSetMapper.selectOne(weappBasicSet); + } + + @Override + public void saveOrUpdate(WxWeappBasicSet record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + wxWeappBasicSetMapper.insertSelective(record); + } else { + wxWeappBasicSetMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + wxWeappBasicSetMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxWeappCodeStatusServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappCodeStatusServiceImpl.java new file mode 100644 index 000000000..dd15f5b84 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappCodeStatusServiceImpl.java @@ -0,0 +1,79 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxWeappCodeStatus; +import com.iformall.domain.vo.WxWeappCodeStatusVo; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.mapper.WxWeappCodeStatusMapper; +import com.iformall.service.WxWeappCodeStatusService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class WxWeappCodeStatusServiceImpl implements WxWeappCodeStatusService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxWeappCodeStatusMapper weappCodeStatusMapper; + + + @Override + public PageInfo listAsPage(WxWeappCodeStatusVo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> weappCodeStatusMapper.findVoList(record)); + } + + @Override + public List getList(WxWeappCodeStatusVo record) { + return weappCodeStatusMapper.findVoList(record); + } + + @Override + public List getVersionList(Integer type) { + return weappCodeStatusMapper.findUserVersions(type); + } + + @Override + public WxWeappCodeStatus getById(Long id) { + return weappCodeStatusMapper.selectByPrimaryKey(id); + } + + @Override + public WxWeappCodeStatus getByAppId(String appId) { + WxWeappCodeStatus weappCodeStatusQ = new WxWeappCodeStatus(); + weappCodeStatusQ.setAppId(appId); + return weappCodeStatusMapper.selectOne(weappCodeStatusQ); + } + + @Override + public void saveStatus(WxWeappCodeStatus record) { + logger.info("CODE-COMMIT: " + record.toString()); + weappCodeStatusMapper.insertSelective(record); + } + + @Override + public void updateStatus(WxWeappCodeStatus record) { + logger.info("CODE-COMMIT: " + record.toString()); + weappCodeStatusMapper.updateStatus(record); + } + + @Override + public void deleteById(Long id) { + weappCodeStatusMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxWeappExtSetServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappExtSetServiceImpl.java new file mode 100644 index 000000000..95262af55 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappExtSetServiceImpl.java @@ -0,0 +1,58 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxWeappExtSet; +import com.iformall.mapper.WxWeappExtSetMapper; +import com.iformall.service.WxWeappExtSetService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class WxWeappExtSetServiceImpl implements WxWeappExtSetService { + + @Autowired + WxWeappExtSetMapper wxWeappExtSetMapper; + + + @Override + public PageInfo listAsPage(WxWeappExtSet record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxWeappExtSetMapper.findList(record)); + } + + @Override + public WxWeappExtSet getById(Long id) { + return wxWeappExtSetMapper.selectByPrimaryKey(id); + } + + @Override + public WxWeappExtSet getByObj(WxWeappExtSet record) { + return wxWeappExtSetMapper.selectOne(record); + } + + @Override + public void saveOrUpdate(WxWeappExtSet record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + wxWeappExtSetMapper.insertSelective(record); + } else { + wxWeappExtSetMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + wxWeappExtSetMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxWeappReleaseStatusServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappReleaseStatusServiceImpl.java new file mode 100644 index 000000000..8dd3fe7f3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxWeappReleaseStatusServiceImpl.java @@ -0,0 +1,110 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxAuthorizerInfo; +import com.iformall.domain.po.WxWeappReleaseStatus; +import com.iformall.domain.vo.WxWeappReleaseStatusVo; +import com.iformall.enums.EnumWeappReleaseStatus; +import com.iformall.mapper.WxAuthorizerInfoMapper; +import com.iformall.mapper.WxWeappReleaseStatusMapper; +import com.iformall.service.WxWeappReleaseStatusService; +import org.omg.CORBA.INTERNAL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class WxWeappReleaseStatusServiceImpl implements WxWeappReleaseStatusService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxWeappReleaseStatusMapper weappReleaseStatusMapper; + + @Autowired + WxAuthorizerInfoMapper authorizerInfoMapper; + + + @Override + public PageInfo listAsPage(WxWeappReleaseStatusVo record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> weappReleaseStatusMapper.findVoList(record)); + } + + @Override + public List getList(WxWeappReleaseStatusVo record) { + return weappReleaseStatusMapper.findVoList(record); + } + + @Override + public List getVersionList(Integer type) { + return weappReleaseStatusMapper.findUserVersions(type); + } + + @Override + public WxWeappReleaseStatus getById(Long id) { + return weappReleaseStatusMapper.selectByPrimaryKey(id); + } + + @Override + public WxWeappReleaseStatus getByAppId(String appId) { + WxWeappReleaseStatus weappCodeStatusQ = new WxWeappReleaseStatus(); + weappCodeStatusQ.setAppId(appId); + return weappReleaseStatusMapper.selectOne(weappCodeStatusQ); + } + + @Override + public void saveStatus(WxWeappReleaseStatus record) { + logger.info("RELEASE: " + record.toString()); + weappReleaseStatusMapper.insertSelective(record); + } + + @Override + public void updateStatus(WxWeappReleaseStatus record) { + Date curDate = new Date(); + logger.info("RELEASE: " + record.toString()); + // 更新 小程序 状态 + if(record.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) { // 发布成功 + WxAuthorizerInfo updateInfo = new WxAuthorizerInfo(); + updateInfo.setAuthorizerAppid(record.getAppId()); + updateInfo.setCurrentVersion(record.getUserVersion()); + updateInfo.setCurrentDesc(record.getVersionDesc()); + updateInfo.setReleaseTime(curDate); + updateInfo.setUpdateTime(curDate); + authorizerInfoMapper.updateReleaseInfo(updateInfo); + } + // 发布回退,退回上次发布状态 + if(record.getReleaseStatus().equals(EnumWeappReleaseStatus.BACK.getCode())) { + try { + WxAuthorizerInfo appQ = new WxAuthorizerInfo(); + appQ.setAuthorizerAppid(record.getAppId()); + WxAuthorizerInfo authorizerInfo = authorizerInfoMapper.selectOne(appQ); + if(authorizerInfo != null) { + record.setUserVersion(authorizerInfo.getCurrentVersion()); + record.setVersionDesc(authorizerInfo.getCurrentDesc()); + record.setReleaseTime(authorizerInfo.getReleaseTime()); + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + weappReleaseStatusMapper.updateStatus(record); + } + + @Override + public void deleteById(Long id) { + weappReleaseStatusMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java b/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java new file mode 100644 index 000000000..047602078 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java @@ -0,0 +1,40 @@ +package com.iformall.utils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author luozukai + * 文件下载 + * @date 2019/2/13 15:32 + */ +public class DownFileUtil { + + public static void downFile(String filePath,String exportFileName, HttpServletResponse response, + HttpServletRequest req) throws IOException { + response.reset(); + response.setContentType("bin"); + String agent = req.getHeader("user-agent"); + if (agent.contains("Firefox")) { + response.setHeader("Content-disposition", + "attachment; filename=" + + new String(exportFileName.getBytes("GB2312"), + "ISO-8859-1")); + } else { + response.setHeader("Content-disposition", + "attachment; filename=" + + java.net.URLEncoder.encode(exportFileName, + "UTF-8")); + } + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + InputStream inStream = new FileInputStream(filePath); + while ((len = inStream.read(b)) > 0) + response.getOutputStream().write(b, 0, len); + inStream.close(); + } +} diff --git a/mallinkService/src/main/java/com/iformall/utils/IPUtil.java b/mallinkService/src/main/java/com/iformall/utils/IPUtil.java index 53b5e7e85..467d4dd32 100644 --- a/mallinkService/src/main/java/com/iformall/utils/IPUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/IPUtil.java @@ -9,23 +9,24 @@ import java.net.UnknownHostException; public class IPUtil { private final static Logger logger = LoggerFactory.getLogger(IPUtil.class); + private final static String UNKNOWN = "unknown"; public static String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } - if (ipAddress == null || ipAddress.length() == 0 || "unknow".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("HTTP_CLIENT_IP"); } - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR"); } - if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { //根据网卡获取本机配置的IP地址 diff --git a/mallinkService/src/main/java/com/iformall/utils/JsonUtil.java b/mallinkService/src/main/java/com/iformall/utils/JsonUtil.java new file mode 100644 index 000000000..6fd4daa35 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/JsonUtil.java @@ -0,0 +1,128 @@ +package com.iformall.utils; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + + +public final class JsonUtil { + private static Logger log = LoggerFactory.getLogger(JsonUtil.class); + public static final ObjectMapper mapper = new ObjectMapper(); + + private JsonUtil() { + } + + public static String obj2Json(Object obj) { + if(obj != null) { + try { + return mapper.writeValueAsString(obj); + } catch (JsonProcessingException var2) { + throw new RuntimeException(var2); + } + } else { + return null; + } + } + + public static byte[] obj2Byte(Object obj) { + if(obj != null) { + try { + return mapper.writeValueAsBytes(obj); + } catch (JsonProcessingException var2) { + var2.printStackTrace(); + } + } + + return new byte[0]; + } + + public static Object readValue(String json, Class clazz) { + Object t = null; + + try { + return mapper.readValue(json, clazz); + } catch (Exception var4) { + log.info("解析对象:{}", json); + log.error("json解析错误:{}", var4.getMessage(), var4); + return t; + } + } + +// public static T readValue(String json, TypeReference type) { +// Object object = null; +// +// try { +// object = mapper.readValue(json, type); +// } catch (Exception var4) { +// log.info("解析对象:{}", json); +// log.error("json解析错误:{}", var4.getMessage(), var4); +// } +// +// return object; +// } +// +// public static T readValue(byte[] json, TypeReference type) { +// Object object = null; +// +// try { +// object = mapper.readValue(json, type); +// } catch (Exception var4) { +// log.info("解析对象:{}", json); +// log.error("json解析错误:{}", var4.getMessage(), var4); +// } +// +// return object; +// } +// +// public static Map readValueAsMap(String json) { +// return (Map)readValue(json, new TypeReference>() { +// }); +// } + + static { + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); + mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + SimpleModule module = new SimpleModule(); + module.addSerializer(HashMap.class, new JsonUtil.HashMapSerializer()); + mapper.registerModule(module); + } + + public static class HashMapSerializer extends JsonSerializer { + public HashMapSerializer() { + } + + public void serialize(HashMap value, JsonGenerator jgen, SerializerProvider provider) throws IOException { + jgen.writeStartObject(); + Iterator var4 = value.entrySet().iterator(); + + while(var4.hasNext()) { + Object entry = var4.next(); + if(entry instanceof Map.Entry) { + Map.Entry en = (Map.Entry)entry; + if(en.getValue() != null && en.getKey() != null) { + jgen.writeObjectField(en.getKey().toString(), en.getValue()); + } + } + } + + jgen.writeEndObject(); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/utils/TOTP.java b/mallinkService/src/main/java/com/iformall/utils/TOTP.java new file mode 100644 index 000000000..83f4a2ae6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/TOTP.java @@ -0,0 +1,237 @@ +package com.iformall.utils; + +import org.apache.commons.lang3.StringUtils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.lang.reflect.UndeclaredThrowableException; +import java.math.BigInteger; +import java.security.GeneralSecurityException; +import java.util.Date; + +public class TOTP { + + /** + * 共享密钥 + */ + private static final String SECRET_KEY = "u1aO9kQncR7cQfRb8Q9FX"; + + /** + * 时间步长 单位:毫秒 作为口令变化的时间周期 + */ + private static final long STEP = 30000; + + /** + * 转码位数 [1-8] + */ + private static final int CODE_DIGITS = 8; + + /** + * 初始化时间 + */ + private static final long INITIAL_TIME = 0; + + /** + * 柔性时间回溯 + */ + private static final long FLEXIBILIT_TIME = 5000; + + /** + * 数子量级 + */ + private static final int[] DIGITS_POWER = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000}; + + private TOTP() { + } + + /** + * 生成一次性密码 + * + * @param code 账户 + * @param pass 密码 + * @return String + */ + public static String generateMyTOTP(String code, String pass) { + if (StringUtils.isBlank(code) || StringUtils.isBlank(pass)) { + throw new RuntimeException("账户密码不许为空"); + } + long now = new Date().getTime(); + String time = Long.toHexString(timeFactor(now)).toUpperCase(); + return generateTOTP(code + pass + SECRET_KEY, time); + } + + /** + * 刚性口令验证 + * + * @param code 账户 + * @param pass 密码 + * @param totp 待验证的口令 + * @return boolean + */ + public static boolean verifyTOTPRigidity(String code, String pass, String totp) { + return generateMyTOTP(code, pass).equals(totp); + } + + /** + * 柔性口令验证 + * + * @param code 账户 + * @param pass 密码 + * @param totp 待验证的口令 + * @return boolean + */ + public static boolean verifyTOTPFlexibility(String code, String pass, String totp) { + long now = new Date().getTime(); + String time = Long.toHexString(timeFactor(now)).toUpperCase(); + String tempTotp = generateTOTP(code + pass + SECRET_KEY, time); + if (tempTotp.equals(totp)) { + return true; + } + String time2 = Long.toHexString(timeFactor(now - FLEXIBILIT_TIME)).toUpperCase(); + String tempTotp2 = generateTOTP(code + pass + SECRET_KEY, time2); + return tempTotp2.equals(totp); + } + + /** + * 生成一次性密码 + * + * @param code 账户 + * @return String + */ + public static String generateWechatOpen(String code) { + if (StringUtils.isBlank(code)) { + throw new RuntimeException("账户密码不许为空"); + } + long now = new Date().getTime(); + String time = Long.toHexString(timeFactor(now)).toUpperCase(); + return generateTOTP(code + SECRET_KEY, time); + } + + /** + * 刚性口令验证 + * + * @param code 账户 + * @param totp 待验证的口令 + * @return boolean + */ + public static boolean verifyWechatOpenRigidity(String code, String totp) { + return generateWechatOpen(code).equals(totp); + } + + /** + * 柔性口令验证 + * + * @param code 账户 + * @param totp 待验证的口令 + * @return boolean + */ + public static boolean verifyWechatOpenFlexibility(String code, String totp) { + long now = new Date().getTime(); + String time = Long.toHexString(timeFactor(now)).toUpperCase(); + String tempTotp = generateTOTP(code + SECRET_KEY, time); + if (tempTotp.equals(totp)) { + return true; + } + String time2 = Long.toHexString(timeFactor(now - FLEXIBILIT_TIME)).toUpperCase(); + String tempTotp2 = generateTOTP(code + SECRET_KEY, time2); + return tempTotp2.equals(totp); + } + + /** + * 获取动态因子 + * + * @param targetTime 指定时间 + * @return long + */ + private static long timeFactor(long targetTime) { + return (targetTime - INITIAL_TIME) / STEP; + } + + /** + * 哈希加密 + * + * @param crypto 加密算法 + * @param keyBytes 密钥数组 + * @param text 加密内容 + * @return byte[] + */ + private static byte[] hmac_sha(String crypto, byte[] keyBytes, byte[] text) { + try { + Mac hmac; + hmac = Mac.getInstance(crypto); + SecretKeySpec macKey = new SecretKeySpec(keyBytes, "AES"); + hmac.init(macKey); + return hmac.doFinal(text); + } catch (GeneralSecurityException gse) { + throw new UndeclaredThrowableException(gse); + } + } + + private static byte[] hexStr2Bytes(String hex) { + byte[] bArray = new BigInteger("10" + hex, 16).toByteArray(); + byte[] ret = new byte[bArray.length - 1]; + System.arraycopy(bArray, 1, ret, 0, ret.length); + return ret; + } + + private static String generateTOTP(String key, String time) { + return generateTOTP(key, time, "HmacSHA1"); + } + + + private static String generateTOTP256(String key, String time) { + return generateTOTP(key, time, "HmacSHA256"); + } + + private static String generateTOTP512(String key, String time) { + return generateTOTP(key, time, "HmacSHA512"); + } + + private static String generateTOTP(String key, String time, String crypto) { + StringBuilder timeBuilder = new StringBuilder(time); + while (timeBuilder.length() < 16) + timeBuilder.insert(0, "0"); + time = timeBuilder.toString(); + + byte[] msg = hexStr2Bytes(time); + byte[] k = key.getBytes(); + byte[] hash = hmac_sha(crypto, k, msg); + return truncate(hash); + } + + /** + * 截断函数 + * + * @param target 20字节的字符串 + * @return String + */ + private static String truncate(byte[] target) { + StringBuilder result; + int offset = target[target.length - 1] & 0xf; + int binary = ((target[offset] & 0x7f) << 24) + | ((target[offset + 1] & 0xff) << 16) + | ((target[offset + 2] & 0xff) << 8) | (target[offset + 3] & 0xff); + + int otp = binary % DIGITS_POWER[CODE_DIGITS]; + result = new StringBuilder(Integer.toString(otp)); + while (result.length() < CODE_DIGITS) { + result.insert(0, "0"); + } + return result.toString(); + } + + public static void main(String[] args) { + try { + + for (int j = 0; j < 10; j++) { + String totp = generateMyTOTP("account01", "12345"); + System.out.println(String.format("加密后: %s", totp)); + Thread.sleep(1000); + } + + } catch (final Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml index fdac39ba9..bf30fd4b9 100644 --- a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml @@ -13,12 +13,18 @@ - + + + + `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`,`web_open_id` + + - `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`open_id`,`flow_permission` + `id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`,`flow_permission`, + `bopen_id`,`web_open_id` @@ -65,8 +71,11 @@ and `phone` = #{phone} - - and `open_id` = #{openId} + + and `bopen_id` = #{bopenId} + + + and `web_open_id` = #{webOpenId} and JSON_CONTAINS(flow_permission->'$[*]', #{flowPermission}, '$') @@ -83,7 +92,7 @@ @@ -98,21 +107,75 @@ - + select + + from mall_user_info + where 1=1 + + and id=#{id} + + + + + + + + + + update mall_user_info + set `web_open_id` = null + where 1=1 + + and `tenant_id`=#{tenantId} + + + and username=#{username} + + + and `id` = #{id} + + + + + + + + + + + + + + + + + + + + + + + + + + + + u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`, + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h` + + + + u.`id`,u.`tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`nick_name`,u.`phone`,u.`flow_permission`, + u.`bopen_id`,u.`web_open_id`, + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h` + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml index ab0f42105..b852e2343 100644 --- a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml @@ -36,7 +36,7 @@ - and `app_id` like concat('%', #{appId},'%') + and `app_id` = #{appId} and `parent_app_id` like concat('%', #{parentAppId},'%') diff --git a/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml new file mode 100644 index 000000000..95ac1376b --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxAuthorizerInfoMapper.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `id`,`authorizer_appid`,`head_img`,`alias`,`qrcode_url`,`create_time`,`authorization_status`,`auth_time`, + `base_status`, `base_time`, `domain_status`, `domain_time`, `webdomain_status`, `webdomain_time`, `template_status`, `template_time`, + `current_version`,`current_desc`,`release_time`, + `open_appid`,`bind_open_time` + + + + where 1 = 1 + + and `id` = #{id} + + + and `authorizer_appid` = #{authorizerAppid} + + + and `head_img` like concat('%', #{headImg},'%') + + + and `alias` like concat('%', #{alias},'%') + + + and `qrcode_url` like concat('%', #{qrcodeUrl},'%') + + + and `create_time` = #{createTime} + + + and `update_time` = #{updateTime} + + + and `authorization_status` = #{authorizationStatus} + + + and `auth_time` = #{authTime} + + + and `base_status` = #{baseStatus} + + + and `base_time` = #{baseTime} + + + and `domain_status` = #{domainStatus} + + + and `domain_time` = #{domainTime} + + + and `webdomain_status` = #{webdomainStatus} + + + and `webdomain_time` = #{webdomainTime} + + + and `template_status` = #{templateStatus} + + + and `template_time` = #{templateTime} + + + and `current_version` = #{currentVersion} + + + and `current_desc` like concat('%', #{currentDesc},'%') + + + and `release_time` = #{releaseTime} + + + and `open_appid` = #{openAppid} + + + and `bind_open_time` = #{bindOpenTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_authorizer_info + set `current_version` = #{currentVersion}, `current_desc` = #{currentDesc}, `release_time` = #{releaseTime}, `update_time` = #{updateTime} + where `authorizer_appid` = #{authorizerAppid} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ai.`id`,ai.`authorizer_appid`,ai.`head_img`,ai.`alias`,ai.`qrcode_url`,ai.`create_time`,ai.`update_time`, + ai.`authorization_status`,ai.`auth_time`, + ai.`base_status`,ai.`base_time`, + ai.`domain_status`,ai.`domain_time`, + ai.`webdomain_status`,ai.`webdomain_time`, + ai.`template_status`,ai.`template_time`, + ai.`current_version`,ai.`current_desc`,ai.`release_time`, + ai.`open_appid`,ai.`bind_open_time`, + a.`type`,a.`name` + + + + where 1 = 1 + + and ai.`id` = #{id} + + + and a.`name` like concat('%', #{name},'%') + + + and a.`type` = #{type} + + + and ai.`authorizer_appid` = #{authorizerAppid} + + + and ai.`authorization_status` = #{authorizationStatus} + + + and ai.`auth_time` = #{authTime} + + + and ai.`base_status` = #{baseStatus} + + + and ai.`base_time` = #{baseTime} + + + and ai.`domain_status` = #{domainStatus} + + + and ai.`domain_time` = #{domainTime} + + + and ai.`webdomain_status` = #{webdomainStatus} + + + and ai.`webdomain_time` = #{webdomainTime} + + + and ai.`template_status` = #{templateStatus} + + + and ai.`template_time` = #{templateTime} + + + and ai.`current_version` = #{currentVersion} + + + and ai.`open_appid` = #{openAppid} + + + and ai.id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml index bf197dfef..d586091b5 100644 --- a/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillAllMapper.xml @@ -10,7 +10,7 @@ bill.rent_shop_type rentShopType from ( select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent + endtime,rent_shop_type from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' @@ -18,7 +18,7 @@ union select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property + endtime,rent_shop_type from wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' @@ -35,13 +35,20 @@ select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other_deposit ) bill left join wx_merchant m on bill.merchant_id=m.id left join wx_shop s on bill.shop_id=s.id - where date_format(bill.receive_date,'%Y-%m')=#{month} + where 1=1 and bill.tenant_id=#{tenantId} + + and date_format(bill.receive_date,'%Y-%m')=#{month} + and m.`name` like concat('%',#{merchantName},'%') and bill.bill_type_value = #{billTypeValue} and bill.`status` = #{status} @@ -57,7 +64,7 @@ select count(bill.id) owncount,IFNULL(sum(bill.owe),0) owe from ( select id,merchant_id,shop_id,tenant_id,1 bill_type_value,'租金' - bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_rent + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from @@ -65,7 +72,7 @@ union select id,merchant_id,shop_id,tenant_id,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from - wx_bill_property + wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from @@ -81,6 +88,9 @@ union select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other_deposit ) bill where bill.tenant_id=#{tenantId} and bill.status=#{status} @@ -98,7 +108,7 @@ select count(bill.id) paycount,IFNULL(sum(bill.pay),0) pay from ( select id,merchant_id,shop_id,tenant_id,1 bill_type_value,'租金' - bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_rent + bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from @@ -106,7 +116,7 @@ union select id,merchant_id,shop_id,tenant_id,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from - wx_bill_property + wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from @@ -122,6 +132,9 @@ union select id,merchant_id,shop_id,tenant_id,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,rent_shop_type from wx_bill_other_deposit ) bill where bill.tenant_id=#{tenantId} and bill.status=#{status} @@ -144,7 +157,7 @@ rentShopType from ( select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime,rent_shop_type - from wx_bill_rent + from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime,rent_shop_type @@ -152,7 +165,7 @@ union select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime,rent_shop_type - from wx_bill_property + from wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,starttime,endtime,rent_shop_type @@ -169,6 +182,10 @@ select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other_deposit ) bill left join wx_merchant m on bill.merchant_id=m.id left join wx_shop s on bill.shop_id=s.id @@ -219,7 +236,7 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) need_pay from ( select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent + endtime,rent_shop_type from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' @@ -227,7 +244,7 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) union select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property + endtime,rent_shop_type from wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' @@ -244,8 +261,12 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other_deposit ) bill - where DATEDIFF(bill.receive_date,now())=3 and bill.status!=3 + where DATEDIFF(bill.receive_date,now())=3 and bill.status not in(3,5,6) group by bill.tenant_id,bill.merchant_id,bill.receive_date) bill left join wx_merchant m on bill.merchant_id=m.id left join (select tenant_id,`name` appname from wx_appinfo app where type=1) app on bill.tenant_id=app.tenant_id @@ -258,7 +279,7 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) select bill.tenant_id,bill.merchant_id,sum(owe) owe from ( select id,merchant_id,shop_id,tenant_id,'租金' name,1 bill_type_value,'租金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_rent + endtime,rent_shop_type from wx_bill_rent where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'租赁押金' name,2 bill_type_value,'租赁押金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' @@ -266,7 +287,7 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) union select id,merchant_id,shop_id,tenant_id,'物业费' name,3 bill_type_value,'物业费' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' - endtime,rent_shop_type from wx_bill_property + endtime,rent_shop_type from wx_bill_property where is_preview = 0 union select id,merchant_id,shop_id,tenant_id,'物业押金' name,4 bill_type_value,'物业押金' bill_type,need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' @@ -283,8 +304,12 @@ select bill.tenant_id,bill.merchant_id,bill.receive_date,ifnull(sum(need_pay),0) select id,merchant_id,shop_id,tenant_id,name,7 bill_type_value,'其他' bill_type,0 as need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type from wx_bill_other + union + select id,merchant_id,shop_id,tenant_id,name,8 bill_type_value,'其他押金' bill_type,0 as + need_pay,receive_pay,pay,owe,DATE_FORMAT(receive_date,'%Y-%m-%d') receive_date,pay_date,expired_day,status,'' starttime,'' endtime,rent_shop_type + from wx_bill_other_deposit ) bill - where DATEDIFF(bill.receive_date,now())<0 and bill.status!=3 + where DATEDIFF(bill.receive_date,now())<0 and bill.status not in(3,5,6) group by bill.tenant_id,bill.merchant_id) bill left join wx_merchant m on bill.merchant_id=m.id left join (select tenant_id,`name` appname from wx_appinfo app where type=1) app on bill.tenant_id=app.tenant_id diff --git a/mallinkService/src/main/resources/mapper/WxBillDepositMapper.xml b/mallinkService/src/main/resources/mapper/WxBillDepositMapper.xml index 4146b5cfa..c3df566c2 100644 --- a/mallinkService/src/main/resources/mapper/WxBillDepositMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillDepositMapper.xml @@ -20,13 +20,14 @@ + `id`,`rent_contract_id`,`receive_pay`,`pay`,`receive_date`,`pay_date`,`createtime`, `expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`,`merchant_id`,`user_id`,`shop_id`,`updatetime`, - `rent_shop_type` + `rent_shop_type`,`return_price` @@ -69,7 +70,7 @@ select br.`id`,br.`receive_pay` receivePay,br.`pay`,br.`receive_date` receiveDate, br.`pay_date` payDate,br.`createtime`,br.`expired_day` expiredDay,br.`owe`,br.`status`, br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, - br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType + br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,br.`return_price` returnPrice from wx_bill_rent_deposit br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id @@ -80,6 +81,7 @@ and br.`status` = #{status} and br.`is_del` = #{isDel} and br.`rent_shop_type` = #{rentShopType} + and br.`rent_contract_id` = #{rentContractId} order by id desc @@ -93,17 +95,20 @@ update wx_bill_rent_deposit set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) - where tenant_id=#{tenantId} and status!=#{paid} and DATEDIFF(now(),receive_date)>0 + where tenant_id=#{tenantId} and status!=#{paid} and status!=5 and DATEDIFF(now(),receive_date)>0 update wx_bill_rent_deposit set status=#{waitPay} where id in( select a.id from (select br.id,rc.receive_period,br.rent_contract_id,br.receive_date from wx_bill_rent_deposit br left join wx_rent_contract rc on br.rent_contract_id=rc.id - where br.tenant_id=#{tenantId} and br.status!=#{paid} and now() < br.receive_date + where br.tenant_id=#{tenantId} and br.status!=#{paid} and br.status!=5 and now() < br.receive_date and DATE_ADD(now(),INTERVAL 1 MONTH)>br.receive_date) a) - - + + diff --git a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml index 34803919e..0a2f36aa7 100644 --- a/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillOtherDepositMapper.xml @@ -20,13 +20,14 @@ + `id`,`receive_pay`,`pay`,`receive_date`,`pay_date`,`createtime`,`expired_day`, `tenant_id`,`owe`,`status`,`is_del`,`merchant_id`,`user_id`,`shop_id`,`updatetime`,`name`,`comments`, - `rent_shop_type` + `rent_shop_type`,`return_price` @@ -68,7 +69,7 @@ @@ -93,18 +93,23 @@ update wx_bill_property_deposit set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) - where tenant_id=#{tenantId} and status!=#{paid} and DATEDIFF(now(),receive_date)>0 + where tenant_id=#{tenantId} and status!=#{paid} and status!=5 and DATEDIFF(now(),receive_date)>0 update wx_bill_property_deposit set status=#{waitPay} where id in( select a.id from (select br.id,rc.receive_period,br.property_contract_id,br.receive_date from wx_bill_property_deposit br left join wx_property_contract rc on br.property_contract_id=rc.id - where br.tenant_id=#{tenantId} and br.status!=#{paid} and now() < br.receive_date + where br.tenant_id=#{tenantId} and br.status!=#{paid} and br.status!=5 and now() < br.receive_date and DATE_ADD(now(),INTERVAL 1 MONTH)>br.receive_date) a) - - - + + + diff --git a/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml b/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml index b86bdc5db..0aa68aba8 100644 --- a/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillPropertyMapper.xml @@ -20,17 +20,25 @@ + + + + + + `id`,`property_contract_id`,`receive_pay`,`pay`,`receive_date`,`pay_date`, `createtime`,`expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`, - `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type` + `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`, + `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview` + - where 1 = 1 + where 1=1 and `id` = #{id} and `property_contract_id` = #{propertyContractId} and `receive_pay` = #{receivePay} @@ -49,7 +57,9 @@ and `shop_id` = #{shopId} and `updatetime` = #{updatetime} and `rent_shop_type` = #{rentShopType} - + and is_preview = 0 + and is_preview = #{isPreview} + and id in @@ -68,10 +78,18 @@ select br.`id`,br.`receive_pay` receivePay,br.`pay`,br.`receive_date` receiveDate, br.`pay_date` payDate,br.`createtime`,br.`expired_day` expiredDay,br.`owe`,br.`status`, br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, - br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType + br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,br.`period`, + br.`revenue`,br.`late_pay_ratio` latePayRatio,br.`late_pay_time` latePayTime, + br.`property_contract_id` propertyContractId,d.receive_pay deposit,case when br.late_pay_time is null then 0 + else + FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe) end latePayPrice, + (select max(period) from wx_bill_property where property_contract_id=br.property_contract_id) + allPeriod,d.`status` depositStatus from wx_bill_property br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id + left join wx_bill_property_deposit d on br.property_contract_id=d.property_contract_id + br.is_preview = 0 and br.`id` = #{id} and br.`merchant_id` = #{merchantId} and m.`name` like concat('%',#{merchantName},'%') @@ -80,31 +98,54 @@ and br.`is_del` = #{isDel} and br.`receive_date` between #{starttime} and #{endtime} and br.`rent_shop_type` = #{rentShopType} - + and br.`property_contract_id` = #{propertyContractId} - order by id desc + order by br.${sortColumns} update wx_bill_property set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) - where tenant_id=#{tenantId} and status!=#{paid} and DATEDIFF(now(),receive_date)>0 + where tenant_id=#{tenantId} and status!=#{paid} and status != 6 and DATEDIFF(now(),receive_date)>0 update wx_bill_property set status=#{waitPay} where id in( select a.id from (select br.id,rc.receive_period,br.property_contract_id,br.receive_date from wx_bill_property br left join wx_property_contract rc on br.property_contract_id=rc.id - where br.tenant_id=#{tenantId} and br.status!=#{paid} and now() < br.receive_date + where br.tenant_id=#{tenantId} and br.status!=#{paid} and br.status != 6 and now() < br.receive_date and DATE_ADD(now(),INTERVAL 1 MONTH)>br.receive_date) a) - - - - + + + + update wx_bill_property set status = 6 where property_contract_id = #{propertyContractId} + and status in(4,2) + + + + update wx_bill_property set status = 6 where property_contract_id in + (select id from wx_property_contract where rent_contract_id = #{id}) + and status in(4,2) + + + + delete from wx_bill_property where property_contract_id = #{id} + + + + update wx_bill_property set updatetime = now() + ,receive_pay = #{receivePay},owe=#{receivePay} + where id = #{id} + + + + update wx_bill_property set is_preview = #{isPreview},merchant_id = #{merchantId} + where property_contract_id = #{propertyContractId} + diff --git a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml index 7768499c5..c81d0ca4a 100644 --- a/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxBillRentMapper.xml @@ -20,18 +20,24 @@ - - + + + + + + + `id`,`rent_contract_id`,`receive_pay`,`pay`,`receive_date`,`pay_date`, `createtime`,`expired_day`,`tenant_id`,`owe`,`status`,`is_del`,`need_pay`, - `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type` + `merchant_id`,`user_id`,`shop_id`,`updatetime`,`rent_shop_type`, + `revenue`,`late_pay_ratio`,`late_pay_time`,`late_pay_price`,`period`,`is_preview` - where 1 = 1 + where 1=1 and `id` = #{id} and `rent_contract_id` = #{rentContractId} and `receive_pay` = #{receivePay} @@ -50,7 +56,9 @@ and `shop_id` = #{shopId} and `updatetime` = #{updatetime} and `rent_shop_type` = #{rentShopType} - + and is_preview = 0 + and is_preview = #{isPreview} + and id in @@ -72,10 +80,18 @@ select br.`id`,br.`receive_pay` receivePay,br.`pay`,br.`receive_date` receiveDate, br.`pay_date` payDate,br.`createtime`,br.`expired_day` expiredDay,br.`owe`,br.`status`, br.`need_pay` needPay,m.`name` merchantName,s.shop_number shopNumber,br.`updatetime`, - br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType + br.`merchant_id` merchantId,br.`rent_shop_type` rentShopType,r.type rentType,r.pay_ratio payRatio, + br.`revenue`,br.`late_pay_ratio` latePayRatio,br.`late_pay_time` latePayTime,br.`period`, + br.`rent_contract_id` rentContractId,d.receive_pay deposit,case when br.late_pay_time is null then 0 else + FLOOR(DATEDIFF(now(),br.late_pay_time)*br.late_pay_ratio/10000*br.owe) end latePayPrice, + (select max(period) from wx_bill_rent where rent_contract_id=br.rent_contract_id) allPeriod,d.`status` + depositStatus from wx_bill_rent br left join wx_merchant m on br.merchant_id=m.id left join wx_shop s on br.shop_id=s.id + left join wx_rent_contract r on br.rent_contract_id=r.id + left join wx_bill_rent_deposit d on br.rent_contract_id=d.rent_contract_id and br.merchant_id=d.merchant_id + br.is_preview = 0 and br.`id` = #{id} and br.`merchant_id` = #{merchantId} and m.`name` like concat('%',#{merchantName},'%') @@ -84,29 +100,48 @@ and br.`is_del` = #{isDel} and br.`receive_date` between #{starttime} and #{endtime} and br.`rent_shop_type` = #{rentShopType} - + and br.`rent_contract_id` = #{rentContractId} - order by id desc + order by br.${sortColumns} update wx_bill_rent set status=#{notPaid},expired_day=DATEDIFF(now(),receive_date) - where tenant_id=#{tenantId} and status!=#{paid} and DATEDIFF(now(),receive_date)>0 + where tenant_id=#{tenantId} and status!=#{paid} and status!=6 and DATEDIFF(now(),receive_date)>0 update wx_bill_rent set status=#{waitPay} where id in( select a.id from (select br.id,rc.receive_period,br.rent_contract_id,br.receive_date from wx_bill_rent br left join wx_rent_contract rc on br.rent_contract_id=rc.id - where br.tenant_id=#{tenantId} and br.status!=#{paid} and now() < br.receive_date + where br.tenant_id=#{tenantId} and br.status!=#{paid} and br.status!=6 and now() < br.receive_date and DATE_ADD(now(),INTERVAL 1 MONTH)>br.receive_date) a) - + + + update wx_bill_rent set status = 6 where rent_contract_id = #{rentContractId} + and status in(4,2) + + + + delete from wx_bill_rent where rent_contract_id = #{id} + + + + update wx_bill_rent set updatetime = now() + ,receive_pay = #{receivePay},owe=#{receivePay} + where id = #{id} + + + + update wx_bill_rent set is_preview = #{isPreview},merchant_id = #{merchantId} + where rent_contract_id = #{rentContractId} + diff --git a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml index 26e79483d..509dcd86e 100644 --- a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml @@ -14,10 +14,13 @@ + + - `id`,`tenant_id`,`coupon_id`,`transaction_id`,`amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`,`share_fee_amount`,`remaining_share_fee_amount`,`create_date`,`update_date` + `id`,`tenant_id`,`coupon_id`,`transaction_id`,`amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`, + `share_fee_amount`,`remaining_share_fee_amount`,`create_date`,`update_date`,`support_transfer` @@ -66,7 +69,7 @@ #{idItem} - + order by ${sortColumns} @@ -192,8 +195,4 @@ - - - - diff --git a/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml new file mode 100644 index 000000000..840c8120c --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxComponentVerifyTicketMapper.xml b/mallinkService/src/main/resources/mapper/WxComponentVerifyTicketMapper.xml new file mode 100644 index 000000000..0d014429b --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxComponentVerifyTicketMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + `id`,`component_appid`,`component_verify_ticket`,`create_time`,`deadline` + + + + where 1 = 1 + + and `id` = #{id} + + + and `component_appid` like concat('%', #{componentAppid},'%') + + + and `component_verify_ticket` like concat('%', #{componentVerifyTicket},'%') + + + and `create_time` = #{createTime} + + + and `deadline` = #{deadline} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml index c510e418c..ca576200d 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml @@ -56,11 +56,6 @@ and cc.`create_date` between #{startdate} and #{enddate} - - and cc.`begin_time` < now() - and cc.`end_time` > now() - - and cc.`status` = #{status} @@ -76,6 +71,11 @@ and cc.`sub_target_id` = #{subTargetId} + + + and c.`support_transfer` = #{supportTransfer} + + and cc.id in @@ -97,7 +97,8 @@ - update wx_coupon_channel set status=#{status} + update wx_coupon_channel + set status=#{status}, update_date=#{updateDate} where coupon_id=#{couponId} and tenant_id = #{tenantId} @@ -106,7 +107,9 @@ , - c.remain_inventory,c.inventory,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.use_limit_quantity,c.send_type + c.remain_inventory,c.inventory,c.cover_img,c.title,c.sub_title,c.sale_price, + c.use_price,c.price,c.unit,c.use_limit_quantity,c.send_type,c.support_transfer,c.press_limit_num,c.auto_refund, + c.valid_type,c.valid_start_date,c.valid_end_date,c.valid_days @@ -132,7 +135,14 @@ - + + + + + + + + cc.id,cc.coupon_id,cc.target_ad,cc.begin_time,cc.end_time, - c.tenant_id,c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.use_limit_quantity,c.send_type,c.valid_type,c.valid_start_date,c.valid_end_date,c.valid_days,c.detail,c.price,c.unit,c.remain_inventory,c.inventory,c.remark,c.status,c.create_date,c.update_date,c.business + c.tenant_id,c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price, + c.use_limit_quantity,c.send_type,c.valid_type,c.valid_start_date,c.valid_end_date, + c.valid_days,c.detail,c.price,c.unit,c.remain_inventory,c.inventory,c.remark,c.status, + c.create_date,c.update_date,c.business,c.support_transfer,c.press_limit_num, c.auto_refund @@ -182,6 +195,9 @@ + + + + + update wx_coupon_channel SET status = 1, update_date = now() where status = 0 and end_time < now() diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 0e912f43f..6e76a1fef 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -31,13 +31,26 @@ + + + + + + + + + + + + + `id`,`tenant_id`,`type`,`cover_img`,`title`,`sub_title`,`sale_price`,`use_price`,`use_limit_quantity`,`send_type`, `valid_type`,`valid_start_date`,`valid_end_date`,`valid_days`,`detail`,`price`,`unit`,`remain_inventory`,`inventory`, `remark`,`status`,`create_date`,`update_date`,`business`,`support_transfer`,`subsidy_num`,`subsidy_type`, - `press_limit_num`, `press_limit_hours` + `press_limit_num`, `press_limit_hours`, `auto_refund`,subsidy_num @@ -159,6 +172,11 @@ and `press_limit_hours` = #{pressLimitHours} + + and `auto_refund` = #{autoRefund} + + + and id in @@ -610,7 +628,15 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index a2d141025..50609e595 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -15,10 +15,11 @@ + - `id`,`tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price` + `id`,`tenant_id`,`coupon_id`,`coupon_type`,`c_user_id`,`owner_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`, `auto_refund` @@ -75,6 +76,11 @@ and `coupon_price` = #{couponPrice} + + + and `auto_refund` = #{autoRefund} + + and id in @@ -248,10 +254,10 @@ where tenant_id=#{tenantId} AND create_date >= #{startTime} and create_date < #{endTime} - - update wx_coupon_order SET coupon_order_status = 2, update_date = now() - where expired_time < now() and coupon_price = 0 and coupon_order_status = 0 - + - @@ -280,6 +285,7 @@ + @@ -295,7 +301,7 @@ co.id,co.tenant_id,co.coupon_id,co.coupon_type,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price, - c.title,c.sale_price,c.use_price,c.price,c.unit, + c.title,c.sale_price,c.use_price,c.price,c.unit,c.auto_refund, (case when com.mc=1 then (select m.name from wx_merchant m, wx_coupon_merchant cm where m.id = cm.merchant_id and cm.product_id=co.coupon_id and cm.status = 0) else '[多商户通用]' end) as merchant_name @@ -303,7 +309,7 @@ co.id,co.tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id,co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price, - c.type,c.title,c.sale_price,c.use_price,c.price,c.unit, + c.type,c.title,c.sale_price,c.use_price,c.price,c.unit,c.auto_refund, bu.name, bu.phone as bphone, cu.phone, m.name as merchant_name @@ -360,15 +366,12 @@ @@ -471,13 +474,13 @@ co.id,co.coupon_id,co.coupon_type,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price, - c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit, + c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.valid_start_date,c.valid_end_date,c.auto_refund, cal.channel_type as send_channel_type co.id,co.tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id,co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price, - c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.detail,c.remark + c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.detail,c.remark,c.valid_start_date,c.valid_end_date,c.auto_refund @@ -505,6 +508,9 @@ + + + @@ -538,7 +544,10 @@ order by ${sortColumns} - + + + + - select + + select c.* from ( + select id,tenant_id,0 coupon_id,0 coupon_type,expired_time,`status`as + coupon_order_status,create_date,update_date,'' cover_img,title,'' sub_title,'' detail,0 unit, + '' remark,amount,remain_amount as remaining_amount,0 support_transfer + from wx_card_transfer_info where 1=1 + + and tenant_id = #{tenantId} + + + and from_user = #{ownerId} + + + + and status = #{couponOrderStatus} + + + and status=8 + + + union + select + from wx_coupon_order co inner join wx_coupon c on co.coupon_id = c.id inner join wx_card_info a on co.id=a.id @@ -684,6 +716,7 @@ #{sItem} + ) c order by ${sortColumns} diff --git a/mallinkService/src/main/resources/mapper/WxDeviceMapper.xml b/mallinkService/src/main/resources/mapper/WxDeviceMapper.xml new file mode 100644 index 000000000..0050312eb --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxDeviceMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + `id`, `tenant_id`, `device_id`, `type`, `status`, `location`, `name`, `version`, `create_date`, `update_date`, `online_status`, `first_hb_time`, `last_hb_time`, `hb_cmd` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `device_id` like concat('%', #{deviceId},'%') + + + + and `version` like concat('%', #{version},'%') + + + + and `location` like concat('%', #{location},'%') + + + + and `name` like concat('%', #{name},'%') + + + + + and `type` = #{type} + + + + and `status` = #{status} + + + + and `create_date` = #{createDate} + + + + and `update_date` = #{updateDate} + + + + and `online_status` = #{onlineStatus} + + + + and `first_hb_time` = #{firstHbTime} + + + + and `last_hb_time` = #{lastHbTime} + + + + and `hb_cmd` = #{hbCmd} + + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml index 3da549d68..643cdc5bf 100644 --- a/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxFlowRecordMapper.xml @@ -13,14 +13,23 @@ - + + + + + + + - `id`,`business_id`,`business_type`,`user_id`,`remark`,`status`,`task_id`,`process_instance_id`,`create_date`,`update_date`,`tenant_id`,`user_name`,task_key,task_name + `id`,`business_id`,`business_type`,`user_id`,`remark`,`status`,`task_id`,`process_instance_id`,`create_date`,`update_date`,`tenant_id`,`user_name`,task_key,task_name,curr_status, + REPLACE (JSON_EXTRACT(variables,'$.contractType'),'"','') contractType, + REPLACE (JSON_EXTRACT(variables,'$.endProperty'),'"','') endProperty, + REPLACE (JSON_EXTRACT(variables,'$.contractNumber'),'"','') contractNumber @@ -31,6 +40,15 @@ and `business_id` = #{businessId} + + and `user_id` = #{userId} + + + and `status` = #{status} + + + and `tenant_id` = #{tenantId} + and id in @@ -43,11 +61,13 @@ - - + + + update wx_flow_record set curr_status=#{currStatus} where process_instance_id=#{processInstanceId} + and status = 1 + diff --git a/mallinkService/src/main/resources/mapper/WxGameActionLogMapper.xml b/mallinkService/src/main/resources/mapper/WxGameActionLogMapper.xml index 27086d1f8..20e4082f6 100644 --- a/mallinkService/src/main/resources/mapper/WxGameActionLogMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxGameActionLogMapper.xml @@ -33,25 +33,28 @@ - and `user_id` = #{userId} + and `user_id` = #{userId} - - and `coupon_order_id` = #{couponOrderId} - + + and `coupon_order_id` = #{couponOrderId} + and `create_time` = #{createTime} + - and `create_time` >= #{startTime} + and `start_time` >= #{startTime} + - and `create_time` <= #{endTime} + and `end_time` <= #{endTime} + @@ -68,9 +71,62 @@ - select COUNT(*) FROM wx_game_action_log a - + + + + diff --git a/mallinkService/src/main/resources/mapper/WxGameMapper.xml b/mallinkService/src/main/resources/mapper/WxGameMapper.xml index cc8f401eb..06be2ead2 100644 --- a/mallinkService/src/main/resources/mapper/WxGameMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxGameMapper.xml @@ -11,38 +11,51 @@ + - `id`,`tenant_id`,`game_id`,`status`,`coupon_ids`,`valid_start_date`,`valid_end_date`,`triggle_action`,`play_limit` + `id`,`tenant_id`,`game_id`,`status`,`coupon_ids`,`valid_start_date`,`valid_end_date`,`triggle_action`,`play_limit`,`award_limit` where 1 = 1 and `id` = #{id} - + + and `tenant_id` like concat('%', #{tenantId},'%') - + + and `game_id` = #{gameId} - + + and `status` = #{status} - + + and `valid_start_date` = #{validStartDate} - + + and `valid_end_date` = #{validEndDate} - + + and `triggle_action` = #{triggleAction} + and `play_limit` = #{playLimit} + + + and `award_limit` = #{awardLimit} + + and id in diff --git a/mallinkService/src/main/resources/mapper/WxMallMapper.xml b/mallinkService/src/main/resources/mapper/WxMallMapper.xml index 27e638828..0100d79bb 100644 --- a/mallinkService/src/main/resources/mapper/WxMallMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallMapper.xml @@ -18,13 +18,14 @@ - + + `id`,`tenant_id`,`name`,`group`,`country`,`province`,`city`,`addr`, `total_area`,`operating_area`,`park_area`,`park_place_number`,`service_phone`, - `img_url`,`img_url_h`, `weap_note` + `img_url`,`img_url_h`, `weap_note`, `img_qrcode_weapp`, `img_qrcode_wemp` @@ -86,6 +87,14 @@ and `img_ur_h` = #{imgUrlH} + + + and `img_qrcode_weapp` = #{imgQrcodeWeapp} + + + and `img_qrcode_wemp` = #{imgQrcodeWemp} + + and id in diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index 33399fd3d..990415d5e 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -92,20 +92,20 @@ - + m.id, - m.img_url,m.name,m.link_phone,m.status, + m.img_url,m.name,m.link_phone,m.status,m.business_id, s.addr,s.shop_number,s.baidu_poi, mb.building_name,mf.floor_name - + - + @@ -115,9 +115,9 @@ - select - + FROM wx_merchant m left join wx_merchant_shop ms on ms.merchant_id = m.id and ms.is_del = 0 left join wx_shop s on ms.shop_id = s.id @@ -136,5 +136,43 @@ + diff --git a/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml index feabf8d32..943823552 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantTradeDailyMapper.xml @@ -165,7 +165,9 @@ and mtd.tenant_id = #{tenantId} - + + and mtd.report_date = #{reportDate} + group by mtd.report_date order by mtd.report_date desc LIMIT 30 diff --git a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml new file mode 100644 index 000000000..ec6329cb5 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,domain,msg_type,msg,send_time,model_id,sender,sender_user_id,sender_user_name,receiver,receiver_user_id, + receiver_user_name,msg_status,status_message,createtime,updatetime,uuid,signature,model_type,msg_json + + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `receiver_user_id` = #{receiverUserId} + + + and `receiver` = #{receiver} + + + and `msg_status` = #{msgStatus} + + + and `domain` = #{domain} + + + + and id in + + #{idItem} + + + order by createtime desc + + + + update wx_msg_record set updatetime = now() + ,msg_status = #{msgStatus} + ,status_message = #{statusMessage} + + and uuid = #{uuid} + + + + + + + INSERT INTO wx_msg_record( id,`uuid`, `msg_type`, + `domain`, `msg`, `send_time`, `model_id`, `model_type`, + `signature`, `sender`, `sender_user_id`, `sender_user_name`, + `receiver`, `receiver_user_id`, `receiver_user_name`, + `msg_status`, `status_message`, `msg_json`) + VALUES(#{id},#{uuid},#{msgType}, + #{domain},#{msg},#{sendTime},#{modelId},#{modelType},#{signature},#{sender}, + #{senderUserId},#{senderUserName},#{receiver},#{receiverUserId},#{receiverUserName}, + #{msgStatus},#{statusMessage},#{msgJson}); + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml new file mode 100644 index 000000000..9c166d84e --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`order_id`,`coupon_id`,`remain_people`,`create_date`,`update_date`,`expired_date`,`status`,`user_id` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `order_id` = #{orderId} + + + and `coupon_id` = #{couponId} + + + and `remain_people` = #{remainPeople} + + + and `create_date` = #{createDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + update wx_order_group set remain_people=remain_people-1,update_date=#{updateDate} where id=#{id} and remain_people>0 + + + + + + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index 14efc22a9..4be9f1a72 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -19,11 +19,13 @@ + + `id`,`order_number`,`tenant_id`,`c_user_id`,`coupon_channel_id`,`product_id`,`type`,`payment_type`,`payment`,`payment_time`,`order_status`,`create_date`,`update_date`,`detail`, - `press_end_date`,`press_current_num`,`press_current_value` + `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id` @@ -96,7 +98,11 @@ and `press_current_value` = #{pressCurrentValue} - + + + and `order_group_id` = #{orderGroupId} + + and `order_status` in @@ -161,15 +167,15 @@ o.id,o.order_number,o.tenant_id,o.c_user_id,o.coupon_channel_id,o.product_id,o.payment_type,o.payment,o.payment_time,o.order_status,o.create_date,o.update_date, - c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit, + c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.valid_start_date,c.valid_end_date, cal.channel_type as send_channel_type o.id,o.order_number,o.tenant_id,o.c_user_id,o.coupon_channel_id,o.product_id,o.payment_type,o.payment,o.payment_time,o.order_status,o.create_date,o.update_date, - c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.detail,c.remark, - co.id as coupon_order_id,co.coupon_order_status + c.type,c.cover_img,c.title,c.sub_title,c.sale_price,c.use_price,c.price,c.unit,c.detail,c.remark,c.valid_start_date,c.valid_end_date, + co.id as coupon_order_id,co.coupon_order_status,c.support_transfer @@ -206,10 +212,13 @@ + + + + + update wx_order set order_status=#{orderStatus} where tenant_id=#{tenantId} and order_group_id=#{orderGroupId} + + diff --git a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml index 99e0530d1..fc9266436 100644 --- a/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPayOrderMapper.xml @@ -83,7 +83,7 @@ - and `prepay_d` like concat('%', #{prepayId},'%') + and `prepay_id` like concat('%', #{prepayId},'%') @@ -126,4 +126,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + p.`id`,p.`tenant_id`,p.`create_time`,p.`update_time`,p.`order_id`,p.`c_user_id`,p.`b_user_id`, + p.`auth_code`,p.`ip`,p.`pay_amount`,p.`pay_time_start`,p.`pay_time_end`, + p.`prepay_id`,p.`transaction_id`,p.`pay_vendor`,p.`pay_order_no`, + p.`pay_order_status`,p.`share`,p.`share_amount`,p.`fail_reason`, + u.`open_id`, + a.`app_id`, a.`pay_id` + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml index 3b77a249d..5f03e8259 100644 --- a/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxProfitSharingOrderMapper.xml @@ -44,11 +44,16 @@ and `order_id` = #{orderId} - - + + + + and `type` = #{type} + + + and `pay_amount` = #{payAmount} - + diff --git a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml index 2f3886ddc..95765b823 100644 --- a/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPropertyContractMapper.xml @@ -34,8 +34,9 @@ - - + + + @@ -44,7 +45,7 @@ `deposit`,`pay_date`,`is_del`,`merchant_name`,`brand`,`business_id`, `shop_type`,`shop_id`,`updatetime`,`createtime`,`rent_area`, `link_person`,`link_phone`,`pay_account`,`filename`,`lease`,`rent_contract_id`, - `start_date`,`end_date`,`apply_status`,`adjust_period` + `start_date`,`end_date`,`apply_status`,`adjust_period`,`business_type`,adjust_ratio @@ -103,7 +104,7 @@ f.floor_name floorName,b.building_name buildingName,receive_period receivePeriod, rc.lease,rc.filepath,rc.filename,rc.pay_account payAccount,rc.sign_date signDate, start_date startDate,end_date endDate,rc.rent_contract_id rentContractId,br.`name` brandName, - s.addr,rc.apply_status applyStatus,rc.adjust_period adjustPeriod + s.addr,rc.apply_status applyStatus,rc.adjust_period adjustPeriod,rc.business_type businessType,rc.adjust_ratio adjustRatio from wx_property_contract rc left join wx_shop s on rc.shop_id=s.id left join wx_mall_floor f on s.floor=f.id @@ -181,10 +182,29 @@ - update wx_property_contract set apply_status=#{applyStatus} where id=#{id} + update wx_property_contract set apply_status=#{applyStatus} + ,business_type=#{businessType} + ,status=#{status} + where id=#{id} update wx_property_contract set status=#{status} where id=#{id} + + + + update wx_property_contract set status=#{status} where rent_contract_id=#{rentContractId} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml index 559353eeb..906a41873 100644 --- a/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxRentContractMapper.xml @@ -38,7 +38,10 @@ - + + + + @@ -46,7 +49,7 @@ `tenant_id`,`filepath`,`status`,`contract_number`,`deposit`,`pay_date`,`is_del`,`merchant_name`, `brand`,`business_id`,`shop_type`,`shop_id`,`updatetime`,`createtime`,`link_person`,`link_phone`, `pay_account`,`filename`,`lease`,`type`,`revenue`,`adjust_ratio`,`adjust_period`,`pay_ratio`, - `start_date`,`end_date`,`apply_status`,`bank_name`,`rent_shop_type` + `start_date`,`end_date`,`apply_status`,`bank_name`,`rent_shop_type`,fix_start_date,fix_end_date,business_type @@ -104,7 +107,8 @@ rc.price,rc.contract_number contractNumber,s.shop_number shopNumber,f.floor_name floorName,b.building_name buildingName, rc.lease,rc.filepath,rc.filename,rc.pay_account payAccount,rc.sign_date signDate,rc.merchant_id merchantId,rc.type, rc.start_date startDate,rc.end_date endDate,br.`name` brandName,rc.apply_status applyStatus,rc.bank_name - bankName,rc.merchant_id merchantId,rc.rent_shop_type rentShopType + bankName,rc.merchant_id merchantId,rc.rent_shop_type rentShopType,rc.fix_start_date fixStartDate,rc.fix_end_date fixEndDate + ,rc.business_type businessType,rc.adjust_period adjustPeriod from wx_rent_contract rc left join wx_shop s on rc.shop_id=s.id left join wx_mall_floor f on s.floor=f.id @@ -163,7 +167,11 @@ - update wx_rent_contract set apply_status=#{applyStatus} where id=#{id} + update wx_rent_contract + set apply_status=#{applyStatus} + ,business_type=#{businessType} + ,status=#{status} + where id=#{id} @@ -178,7 +186,8 @@ + diff --git a/mallinkService/src/main/resources/mapper/WxScreenAdMapper.xml b/mallinkService/src/main/resources/mapper/WxScreenAdMapper.xml new file mode 100644 index 000000000..70d7dd33d --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxScreenAdMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + `id`, `tenant_id`, `title`, `type`, `sub_type`, `status`, `create_date`, `update_date`, `cover_img`, `target_id`, `qrcode` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + + and `title` like concat('%', #{title},'%') + + + + and `type` = #{type} + + + + and `sub_type` = #{subType} + + + + and `status` = #{status} + + + + and `create_date` = #{createDate} + + + + and `update_date` = #{updateDate} + + + + and `cover_img` = #{coverImg} + + + + and `target_id` = #{targetId} + + + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_screen_ad sa + set sa.status = #{status}, sa.update_date = #{updateDate} + where sa.target_id = #{targetId} + + and tenant_id = #{tenantId} + + + + + update wx_screen_ad sa, wx_coupon_channel cc + SET sa.status = 1, sa.update_date = now() + where sa.status = 0 + and sa.target_id = cc.id + and cc.status = 1 + + + diff --git a/mallinkService/src/main/resources/mapper/WxShopMapper.xml b/mallinkService/src/main/resources/mapper/WxShopMapper.xml index 1e6148900..7b962fa60 100644 --- a/mallinkService/src/main/resources/mapper/WxShopMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxShopMapper.xml @@ -258,10 +258,127 @@ order by s.${sortColumns} + + + + and s.`id` = #{id} + + + + + and s.`tenant_id`= #{tenantId} + + + + + and s.`shop_number` like concat('%', #{shopNumber},'%') + + + + + and s.`build_area` like concat('%', #{buildArea},'%') + + + + + and s.`operation_area` like concat('%', #{operationArea},'%') + + + + + and s.`building`= #{building} + + + + + and s.`floor` = #{floor} + + + + + and s.`status` = #{status} + + + + + and s.`x` = #{x} + + + + + and s.`y` = #{y} + + + + + and s.`addr` like concat('%', #{addr},'%') + + + + + and s.`baidu_poi` like concat('%', #{baiduPoi},'%') + + + + + and s.`longitude` = #{longitude} + + + + + and s.`latitude` = #{latitude} + + + + + and s.`create_date` = #{createDate} + + + + + and s.`update_date` = #{updateDate} + + + + and s.`manager` = #{manager} + + + and s.`manager_phone` = #{managerPhone} + + + and s.`type` = #{type} + + + + and s.`point_type` = #{pointType} + + + and s.id in + + #{idItem} + + + order by s.${sortColumns} + + + + + select + from wx_weapp_audit_status + + + + + update wx_weapp_audit_status + set `user_version` = #{userVersion}, `version_desc` = #{versionDesc}, + `audit_status` = #{auditStatus}, `audit_err_code` = #{auditErrCode}, `audit_time` = #{auditTime} + where `app_id` = #{appId} and `type` = #{type} + + + + + + + + + + + + + + + + + + c.`id`,c.`app_id`,c.`type`,c.`user_version`,`version_desc`, + c.`audit_status`,c.`audit_err_code`,c.`audit_time`, + a.`name` + + + + where 1 = 1 + + and c.`id` = #{id} + + + and c.`app_id` = #{appId} + + + and c.`type` = #{type} + + + and c.`user_version` = #{userVersion} + + + and c.`audit_status` = #{auditStatus} + + + and c.`audit_time` = #{auditTime} + + + and a.`name` like concat('%', #{name},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml new file mode 100644 index 000000000..50b757ae1 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxWeappBasicSetMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + `id`,`type`,`domain_url`,`version`,`template_info`,`create_date`,`update_date` + + + + where 1 = 1 + + and `id` = #{id} + + + and `type` = #{type} + + + and `deploy` = #{deploy} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml new file mode 100644 index 000000000..6612bad85 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxWeappCodeStatusMapper.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + `id`,`app_id`,`type`,`user_version`,`version_desc`,`code_status`,`code_err_code`,`code_time` + + + + where 1 = 1 + + and `id` = #{id} + + + and `app_id` = #{appId} + + + and `type` = #{type} + + + and `user_version` = #{userVersion} + + + and `code_status` = #{codeStatus} + + + and `code_time` = #{codeTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_weapp_code_status + set `user_version` = #{userVersion}, `version_desc`= #{versionDesc}, + `code_status` = #{codeStatus}, `code_err_code` = #{codeErrCode}, `code_time` = #{codeTime} + where `app_id` = #{appId} and `type` = #{type} + + + + + + + + + + + + + + + + + + c.`id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`,c.`code_status`,c.`code_err_code`,c.`code_time`, a.`name` + + + + where 1 = 1 + + and c.`id` = #{id} + + + and c.`app_id` = #{appId} + + + and c.`type` = #{type} + + + and c.`user_version` = #{userVersion} + + + and c.`code_status` = #{codeStatus} + + + and a.`name` like concat('%', #{name},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml new file mode 100644 index 000000000..71de37b6a --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxWeappExtSetMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + `id`,`app_id`,`type`,`ext_json`,`release_json`,`create_date`,`update_date` + + + + where 1 = 1 + + and `id` = #{id} + + + and `app_id` = #{appId} + + + and `type` = #{type} + + + and `create_date` = #{createDate} + + + and `update_date` = #{updateDate} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml b/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml new file mode 100644 index 000000000..f615331aa --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxWeappReleaseStatusMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + `id`,`app_id`,`type`,`user_version`,`version_desc`,`release_status`,`release_err_code`,`release_time` + + + + where 1 = 1 + + and `id` = #{id} + + + and `app_id` = #{appId} + + + and `type` = #{type} + + + and `user_version` = #{userVersion} + + + and `release_status` = #{releaseStatus} + + + and `release_time` = #{releaseTime} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_weapp_release_status + set `user_version` = #{userVersion}, `version_desc` = #{versionDesc}, + `release_status` = #{releaseStatus}, `release_err_code` = #{releaseErrCode}, `release_time` = #{releaseTime} + where `app_id` = #{appId} and `type` = #{type} + + + + + + + + + + + + + + + + + + c.`id`,c.`app_id`,c.`type`,c.`user_version`,c.`version_desc`, + c.`release_status`,c.`release_err_code`,c.`release_time`, + a.`name` + + + + where 1 = 1 + + and c.`id` = #{id} + + + and c.`app_id` = #{appId} + + + and c.`type` = #{type} + + + and c.`user_version` = #{userVersion} + + + and c.`release_status` = #{releaseStatus} + + + and c.`release_time` = #{releaseTime} + + + and a.`name` like concat('%', #{name},'%') + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + diff --git a/pom.xml b/pom.xml index 706ac09fd..0d4a85a24 100644 --- a/pom.xml +++ b/pom.xml @@ -17,17 +17,19 @@ mallinkCApi mallinkBApi mallinkSchedule + mallinkMQConsumer org.springframework.boot spring-boot-starter-parent - 2.0.6.RELEASE + 2.0.7.RELEASE 3.3.0 + 3.3.0 3.3.0 3.3.0 2.3.0 @@ -84,6 +86,12 @@ spring-boot-starter-mail + + org.flowable + flowable-spring-boot-starter-process + 6.4.0 + + org.mybatis.spring.boot mybatis-spring-boot-starter @@ -117,6 +125,18 @@ test + + + org.rocketmq.spring.boot + rocketmq-spring-boot-starter + 1.0.0.RELEASE + + + org.apache.rocketmq + rocketmq-client + 4.4.0 + + org.apache.commons commons-lang3 @@ -282,12 +302,6 @@ 2.8.5 - - com.github.axet - kaptcha - 0.0.9 - - com.thoughtworks.xstream @@ -307,6 +321,12 @@ ${weixin-java-miniapp.version} + + com.github.binarywang + weixin-java-mp + ${weixin-java-mp.version} + + com.github.binarywang weixin-java-pay