From e9143a08e86b5f323bd733b02e5e8c6a98c1b1bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E8=88=AA?= <653809315@qq.com> Date: Mon, 26 Aug 2024 16:43:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../setting/SettingProtocolController.java | 18 ++ .../service/ISettingProtocolService.java | 5 + .../impl/SettingProtocolServiceImpl.java | 36 +++ .../SettingProtocolDetailValidate.java | 24 ++ .../setting/SettingProtocolGetDetailVo.java | 23 ++ ZJ-java/ZJ-common/pom.xml | 8 + .../java/com/wyh/common/entity/UserGoods.java | 37 +++ .../wyh/common/mapper/UserGoodsMapper.java | 13 + .../wyh/common/util/HttpClientSslUtils.java | 247 ++++++++++++++++++ .../java/com/wyh/common/util/JsonUtil.java | 110 ++++++++ .../validator/UserGoodsCreateValidate.java | 29 ++ .../main/java/com/wyh/common/vo/CartVo.java | 15 ++ .../wyh/front/controller/CartController.java | 38 +++ .../wyh/front/controller/IndexController.java | 5 +- .../com/wyh/front/service/CartService.java | 12 + .../com/wyh/front/service/IUserService.java | 4 +- .../front/service/impl/CartServiceImpl.java | 95 +++++++ .../front/service/impl/UserServiceImpl.java | 6 +- .../java/com/wyh/front/vo/AccessTokenVo.java | 10 + .../src/main/resources/application-dev.yml | 18 +- ZJ-java/pom.xml | 10 + admin/src/api/setting/website.ts | 7 + admin/src/views/basic/setting/protocol.vue | 73 ++++++ admin/src/views/goods/edit.vue | 2 +- admin/src/views/setting/website/protocol.vue | 2 +- 25 files changed, 829 insertions(+), 18 deletions(-) create mode 100644 ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/setting/SettingProtocolDetailValidate.java create mode 100644 ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/vo/setting/SettingProtocolGetDetailVo.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/UserGoods.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/UserGoodsMapper.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/HttpClientSslUtils.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/JsonUtil.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsCreateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/CartVo.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/vo/AccessTokenVo.java create mode 100644 admin/src/views/basic/setting/protocol.vue diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/setting/SettingProtocolController.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/setting/SettingProtocolController.java index 018ca16..2586000 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/setting/SettingProtocolController.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/setting/SettingProtocolController.java @@ -2,8 +2,10 @@ package com.wyh.admin.controller.setting; import com.wyh.admin.aop.Log; import com.wyh.admin.service.ISettingProtocolService; +import com.wyh.admin.validate.setting.SettingProtocolDetailValidate; import com.wyh.admin.validate.setting.SettingProtocolValidate; import com.wyh.admin.vo.setting.SettingProtocolDetailVo; +import com.wyh.admin.vo.setting.SettingProtocolGetDetailVo; import com.wyh.common.core.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -35,4 +37,20 @@ public class SettingProtocolController { return AjaxResult.success(); } + + @GetMapping("/getDetail") + @ApiOperation(value="条约规则信息") + public AjaxResult getDetail() { + SettingProtocolGetDetailVo getDetailVo = iSettingProtocolService.getDetail(); + return AjaxResult.success(getDetailVo); + } + + @Log(title = "条约规则编辑") + @PostMapping("/saveDeatil") + @ApiOperation(value="条约规则编辑") + public AjaxResult saveDeatil(@Validated @RequestBody SettingProtocolDetailValidate protocolDetailValidate) { + iSettingProtocolService.saveDeatil(protocolDetailValidate); + return AjaxResult.success(); + } + } diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/ISettingProtocolService.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/ISettingProtocolService.java index cb355ec..1182619 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/ISettingProtocolService.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/ISettingProtocolService.java @@ -1,7 +1,9 @@ package com.wyh.admin.service; +import com.wyh.admin.validate.setting.SettingProtocolDetailValidate; import com.wyh.admin.validate.setting.SettingProtocolValidate; import com.wyh.admin.vo.setting.SettingProtocolDetailVo; +import com.wyh.admin.vo.setting.SettingProtocolGetDetailVo; /** * 政策协议服务接口类 @@ -24,4 +26,7 @@ public interface ISettingProtocolService { */ void save(SettingProtocolValidate protocolValidate); + SettingProtocolGetDetailVo getDetail(); + + void saveDeatil(SettingProtocolDetailValidate protocolDetailValidate); } diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/SettingProtocolServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/SettingProtocolServiceImpl.java index bc7754b..03de870 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/SettingProtocolServiceImpl.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/SettingProtocolServiceImpl.java @@ -2,8 +2,10 @@ package com.wyh.admin.service.impl; import com.alibaba.fastjson2.JSON; import com.wyh.admin.service.ISettingProtocolService; +import com.wyh.admin.validate.setting.SettingProtocolDetailValidate; import com.wyh.admin.validate.setting.SettingProtocolValidate; import com.wyh.admin.vo.setting.SettingProtocolDetailVo; +import com.wyh.admin.vo.setting.SettingProtocolGetDetailVo; import com.wyh.admin.vo.setting.SettingProtocolObjectVo; import com.wyh.common.util.ConfigUtils; import com.wyh.common.util.MapUtils; @@ -56,4 +58,38 @@ public class SettingProtocolServiceImpl implements ISettingProtocolService { ConfigUtils.set("protocol","privacy", JSON.toJSONString(protocolValidate.getPrivacy())); } + @Override + public SettingProtocolGetDetailVo getDetail() { + String lease = ConfigUtils.get("protocol", "lease", "{\"name\":\"\",\"content\":\"\"}"); + String integrate = ConfigUtils.get("protocol", "integrate", "{\"name\":\"\",\"content\":\"\"}"); + String helpcenter = ConfigUtils.get("protocol", "helpcenter", "{\"name\":\"\",\"content\":\"\"}"); + Map leaseMap = MapUtils.jsonToMap(lease); + Map integrateMap = MapUtils.jsonToMap(integrate); + Map helpcenterMap = MapUtils.jsonToMap(helpcenter); + SettingProtocolObjectVo leaseObj = new SettingProtocolObjectVo(); + leaseObj.setName(leaseMap.getOrDefault("name", "")); + leaseObj.setContent(leaseMap.getOrDefault("content", "")); + + SettingProtocolObjectVo integrateObj = new SettingProtocolObjectVo(); + integrateObj.setName(integrateMap.getOrDefault("name", "")); + integrateObj.setContent(integrateMap.getOrDefault("content", "")); + + SettingProtocolObjectVo helpcenterObj = new SettingProtocolObjectVo(); + helpcenterObj.setName(helpcenterMap.getOrDefault("name", "")); + helpcenterObj.setContent(helpcenterMap.getOrDefault("content", "")); + + SettingProtocolGetDetailVo vo = new SettingProtocolGetDetailVo(); + vo.setLease(leaseObj); + vo.setIntegrate(integrateObj); + vo.setHelpcenter(helpcenterObj); + return vo; + } + + @Override + public void saveDeatil(SettingProtocolDetailValidate protocolDetailValidate) { + ConfigUtils.set("protocol","lease", JSON.toJSONString(protocolDetailValidate.getLease())); + ConfigUtils.set("protocol","integrate", JSON.toJSONString(protocolDetailValidate.getIntegrate())); + ConfigUtils.set("protocol","helpcenter", JSON.toJSONString(protocolDetailValidate.getHelpcenter())); + } + } diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/setting/SettingProtocolDetailValidate.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/setting/SettingProtocolDetailValidate.java new file mode 100644 index 0000000..e8d1a59 --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/setting/SettingProtocolDetailValidate.java @@ -0,0 +1,24 @@ +package com.wyh.admin.validate.setting; + +import com.wyh.admin.vo.setting.SettingProtocolObjectVo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("政策协议设置参数") +public class SettingProtocolDetailValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "租借条约") + private SettingProtocolObjectVo lease; + + @ApiModelProperty(value = "积分规则") + private SettingProtocolObjectVo integrate; + + @ApiModelProperty(value = "积分规则") + private SettingProtocolObjectVo helpcenter; +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/vo/setting/SettingProtocolGetDetailVo.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/vo/setting/SettingProtocolGetDetailVo.java new file mode 100644 index 0000000..1768d0e --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/vo/setting/SettingProtocolGetDetailVo.java @@ -0,0 +1,23 @@ +package com.wyh.admin.vo.setting; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("条约规则详情Vo") +public class SettingProtocolGetDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "租借条约") + private SettingProtocolObjectVo lease; + + @ApiModelProperty(value = "积分规则") + private SettingProtocolObjectVo integrate; + + @ApiModelProperty(value = "帮助中心") + private SettingProtocolObjectVo helpcenter; +} diff --git a/ZJ-java/ZJ-common/pom.xml b/ZJ-java/ZJ-common/pom.xml index f4eeb24..60fd585 100644 --- a/ZJ-java/ZJ-common/pom.xml +++ b/ZJ-java/ZJ-common/pom.xml @@ -31,6 +31,14 @@ + + com.alibaba + fastjson + + + cn.mrzin + tool-wx + com.github.stuxuhai jpinyin diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/UserGoods.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/UserGoods.java new file mode 100644 index 0000000..2c02c27 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/UserGoods.java @@ -0,0 +1,37 @@ +package com.wyh.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("用户商品信息实体") +public class UserGoods implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + @ApiModelProperty(value = "") + private Integer id; + + @ApiModelProperty(value = "") + private Integer userId; + + @ApiModelProperty(value = "") + private Integer goodsId; + + @ApiModelProperty(value = "") + private Integer num; + + @ApiModelProperty(value = "") + private Integer isCheck; + + @ApiModelProperty(value = "") + private BigDecimal price; + +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/UserGoodsMapper.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/UserGoodsMapper.java new file mode 100644 index 0000000..6fe897c --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/UserGoodsMapper.java @@ -0,0 +1,13 @@ +package com.wyh.common.mapper; + +import com.wyh.common.core.basics.IBaseMapper; +import com.wyh.common.entity.UserGoods; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户商品信息Mapper + * @author wyh + */ +@Mapper +public interface UserGoodsMapper extends IBaseMapper { +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/HttpClientSslUtils.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/HttpClientSslUtils.java new file mode 100644 index 0000000..b31bd8c --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/HttpClientSslUtils.java @@ -0,0 +1,247 @@ +package com.wyh.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.MDC; +import org.springframework.http.HttpStatus; +import org.springframework.util.CollectionUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * HTTP/HTTPS 请求封装: GET / POST + * 默认失败重试3次 + * @author admin + */ +@Slf4j +public class HttpClientSslUtils { + + /** + * 默认的字符编码格式 + */ + private static final String DEFAULT_CHAR_SET = "UTF-8"; + /** + * 默认连接超时时间 (毫秒) + */ + private static final Integer DEFAULT_CONNECTION_TIME_OUT = 2000; + /** + * 默认socket超时时间 (毫秒) + */ + private static final Integer DEFAULT_SOCKET_TIME_OUT = 3000; + + /** socketTimeOut上限 */ + private static final Integer SOCKET_TIME_OUT_UPPER_LIMIT = 10000; + + /** socketTimeOut下限 */ + private static final Integer SOCKET_TIME_OUT_LOWER_LIMIT = 1000; + + private static CloseableHttpClient getHttpClient() { + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(DEFAULT_SOCKET_TIME_OUT) + .setConnectTimeout(DEFAULT_CONNECTION_TIME_OUT).build(); + return HttpClients.custom().setDefaultRequestConfig(requestConfig) + .setRetryHandler(new DefaultHttpRequestRetryHandler()).build(); + } + + private static CloseableHttpClient getHttpClient(Integer socketTimeOut) { + RequestConfig requestConfig = + RequestConfig.custom().setSocketTimeout(socketTimeOut).setConnectTimeout(DEFAULT_CONNECTION_TIME_OUT) + .build(); + return HttpClients.custom().setDefaultRequestConfig(requestConfig) + .setRetryHandler(new DefaultHttpRequestRetryHandler()).build(); + } + + public static String doPost(String url, String requestBody) throws Exception { + return doPost(url, requestBody, ContentType.APPLICATION_JSON); + } + + public static String doPost(String url, String requestBody, Integer socketTimeOut) throws Exception { + return doPost(url, requestBody, ContentType.APPLICATION_JSON, null, socketTimeOut); + } + + public static String doPost(String url, String requestBody, ContentType contentType) throws Exception { + return doPost(url, requestBody, contentType, null); + } + + public static String doPost(String url, String requestBody, List headers) throws Exception { + return doPost(url, requestBody, ContentType.APPLICATION_JSON, headers); + } + + public static String doPost(String url, String requestBody, ContentType contentType, List headers) + throws Exception { + return doPost(url, requestBody, contentType, headers, getHttpClient()); + } + + public static String doPost(String url, String requestBody, ContentType contentType, List headers, + Integer socketTimeOut) throws Exception { + if (socketTimeOut < SOCKET_TIME_OUT_LOWER_LIMIT || socketTimeOut > SOCKET_TIME_OUT_UPPER_LIMIT) { + log.error("socketTimeOut非法"); + throw new Exception(); + } + return doPost(url, requestBody, contentType, headers, getHttpClient(socketTimeOut)); + } + + + /** + * 通用Post远程服务请求 + * @param url + * 请求url地址 + * @param requestBody + * 请求体body + * @param contentType + * 内容类型 + * @param headers + * 请求头 + * @return String 业务自行解析 + * @throws Exception + */ + public static String doPost(String url, String requestBody, ContentType contentType, List headers, + CloseableHttpClient client) throws Exception { + + // 构造http方法,设置请求和传输超时时间,重试3次 + CloseableHttpResponse response = null; + long startTime = System.currentTimeMillis(); + try { + HttpPost post = new HttpPost(url); + if (!CollectionUtils.isEmpty(headers)) { + for (BasicHeader header : headers) { + post.setHeader(header); + } + } + StringEntity entity = + new StringEntity(requestBody, ContentType.create(contentType.getMimeType(), DEFAULT_CHAR_SET)); + post.setEntity(entity); + response = client.execute(post); + if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { + log.error("业务请求返回失败:{}", EntityUtils.toString(response.getEntity())); + throw new Exception(); + } + String result = EntityUtils.toString(response.getEntity()); + return result; + } finally { + releaseResourceAndLog(url, requestBody, response, startTime); + } + } + + /** + * 暂时用于智慧园区业务联调方式 + * @param url 业务请求url + * @param param 业务参数 + * @return + * @throws Exception + */ + public static String doPostWithUrlEncoded(String url, + Map param) throws Exception { + // 创建Httpclient对象 + CloseableHttpClient httpClient = getHttpClient(); + CloseableHttpResponse response = null; + long startTime = System.currentTimeMillis(); + try { + // 创建Http Post请求 + HttpPost httpPost = new HttpPost(url); + // 创建参数列表 + if (param != null) { + List paramList = new ArrayList<>(); + for (String key : param.keySet()) { + paramList.add(new BasicNameValuePair(key, param.get(key))); + } + // 模拟表单 + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, DEFAULT_CHAR_SET); + httpPost.setEntity(entity); + } + // 执行http请求 + response = httpClient.execute(httpPost); + if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { + log.error("业务请求返回失败:{}" , EntityUtils.toString(response.getEntity())); + throw new Exception(); + } + String resultString = EntityUtils.toString(response.getEntity(), DEFAULT_CHAR_SET); + return resultString; + } finally { + releaseResourceAndLog(url, param == null ? null : param.toString(), response, startTime); + } + } + + private static void releaseResourceAndLog(String url, String request, CloseableHttpResponse response, long startTime) { + if (null != response) { + try { + response.close(); + recordInterfaceLog(startTime, url, request); + } catch (IOException e) { + log.error(e.getMessage()); + } + } + } + + public static String doGet(String url) throws Exception { + return doGet(url, ContentType.DEFAULT_TEXT); + } + + public static String doGet(String url, ContentType contentType) throws Exception { + return doGet(url, contentType, null); + } + + public static String doGet(String url, List headers) throws Exception { + return doGet(url, ContentType.DEFAULT_TEXT, headers); + } + + /** + * 通用Get远程服务请求 + * @param url + * 请求参数 + * @param contentType + * 请求参数类型 + * @param headers + * 请求头可以填充 + * @return String 业务自行解析数据 + * @throws Exception + */ + public static String doGet(String url, ContentType contentType, List headers) throws Exception { + CloseableHttpResponse response = null; + long startTime = System.currentTimeMillis(); + try { + CloseableHttpClient client = getHttpClient(); + HttpGet httpGet = new HttpGet(url); + if (!CollectionUtils.isEmpty(headers)) { + for (BasicHeader header : headers) { + httpGet.setHeader(header); + } + } + if(contentType != null){ + httpGet.setHeader("Content-Type", contentType.getMimeType()); + } + response = client.execute(httpGet); + if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { + log.error("业务请求返回失败:{}", EntityUtils.toString(response.getEntity())); + throw new Exception(); + } + String result = EntityUtils.toString(response.getEntity()); + return result; + } finally { + releaseResourceAndLog(url, null, response, startTime); + } + } + + private static void recordInterfaceLog(long startTime, String url, String request) { + long endTime = System.currentTimeMillis(); + long timeCost = endTime - startTime; + MDC.put("totalTime", String.valueOf(timeCost)); + MDC.put("url", url); + MDC.put("logType", "third-platform-service"); + log.info("HttpClientSslUtils 远程请求:{} 参数:{} 耗时:{}ms", url, request, timeCost); + } +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/JsonUtil.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/JsonUtil.java new file mode 100644 index 0000000..a2ab16a --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/JsonUtil.java @@ -0,0 +1,110 @@ +package com.wyh.common.util; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; + +import java.text.SimpleDateFormat; + +@Slf4j +public class JsonUtil { + + /** + * 定义映射对象 + */ + public static ObjectMapper objectMapper = new ObjectMapper(); + + /** + * 日期格式化 + */ + private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + static { + //对象的所有字段全部列入 + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + //取消默认转换timestamps形式 + objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + //忽略空Bean转json的错误 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss + objectMapper.setDateFormat(new SimpleDateFormat(DATE_FORMAT)); + //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + } + + /** + * string转JsonNode + * + * @param jsonString + * @return com.fasterxml.jackson.databind.JsonNode + */ + public static JsonNode stringToJsonNode(String jsonString) throws JsonProcessingException { + + return objectMapper.readTree(jsonString); + + } + + /** + * 对象转json字符串 + * + * @param obj + * @param + */ + public static String objToString(T obj) { + + if (obj == null) { + return null; + } + try { + return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.warn("Parse Object to String error : {}", e.getMessage()); + return null; + } + } + + /** + * 对象转格式化的字符串字符串 + * + * @param obj + * @param + * @return + */ + public static String objToPrettyString(T obj) { + if (obj == null) { + return null; + } + try { + return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.warn("Parse Object to String error : {}", e.getMessage()); + return null; + } + } + + /** + * json字符串转对象 + * + * @param jsonString + * @param cls + * @param + */ + public static T stringToObj(String jsonString, Class cls) { + if (StringUtils.isEmpty(jsonString) || cls == null) { + return null; + } + try { + return cls.equals(String.class) ? (T) jsonString : objectMapper.readValue(jsonString, cls); + } catch (JsonProcessingException e) { + log.warn("Parse String to Object error : {}", e.getMessage()); + return null; + } + } + +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsCreateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsCreateValidate.java new file mode 100644 index 0000000..9941999 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsCreateValidate.java @@ -0,0 +1,29 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("用户商品信息创建参数") +public class UserGoodsCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "goodsId参数缺失") + @ApiModelProperty(value = "商品id") + private Integer goodsId; + + @NotNull(message = "num参数缺失") + @ApiModelProperty(value = "商品数量") + private Integer num; + + @NotNull(message = "isCheck参数缺失") + @ApiModelProperty(value = "商品是否选中,0未选中,1选中") + private Integer isCheck; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/CartVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/CartVo.java new file mode 100644 index 0000000..9345320 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/CartVo.java @@ -0,0 +1,15 @@ +package com.wyh.common.vo; + +import com.wyh.common.entity.goods.Goods; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class CartVo { + + private List goodsList; + private BigDecimal totalPrice; + private BigDecimal checkTotalPrice; +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java new file mode 100644 index 0000000..67ed591 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java @@ -0,0 +1,38 @@ +package com.wyh.front.controller; + +import com.wyh.common.core.AjaxResult; +import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.vo.CartVo; +import com.wyh.front.service.CartService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("front/cart") +@Api(tags = "购物车") +public class CartController { + + + @Resource + CartService cartService; + + + @PostMapping("addCart") + @ApiOperation(value = "加入购物车") + public AjaxResult addCart(@Validated @RequestBody List cartCreateValited) { + cartService.addCart(cartCreateValited); + return AjaxResult.success(); + } + + @GetMapping("getCart") + @ApiOperation(value = "获取购物车") + public AjaxResult getCart() { + CartVo cart = cartService.getCart(); + return AjaxResult.success(cart); + } +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/IndexController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/IndexController.java index 6533b6c..1dcbd1c 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/IndexController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/IndexController.java @@ -59,13 +59,14 @@ public class IndexController { @NotLogin @GetMapping("/policy") - @ApiOperation(value="政策协议",notes="类型 service=服务协议,privacy=隐私协议" ) - @ApiParam(name="type",value="类型 service=服务协议,privacy=隐私协议") + @ApiOperation(value="政策协议规则条约",notes="类型 service=服务协议,privacy=隐私协议, lease=租借条约,integrate=积分规则,helpcenter=帮助中心" ) + @ApiParam(name="type",value="类型 service=服务协议,privacy=隐私协议 , lease=租借条约,integrate=积分规则,helpcenter=帮助中心",required = true) public AjaxResult> policy(@RequestParam String type) { Map map = iIndexService.policy(type); return AjaxResult.success(map); } + @NotLogin @GetMapping("/hotSearch") // @ApiOperation(value="热门搜索") diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java new file mode 100644 index 0000000..a62c716 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java @@ -0,0 +1,12 @@ +package com.wyh.front.service; + +import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.vo.CartVo; + +import java.util.List; + +public interface CartService { + void addCart( List cartCreateValited); + + CartVo getCart(); +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IUserService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IUserService.java index e09d7c6..f29cb6f 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IUserService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IUserService.java @@ -1,11 +1,11 @@ package com.wyh.front.service; -import com.wyh.front.vo.user.UserCenterVo; -import com.wyh.front.vo.user.UserInfoVo; import com.wyh.front.validate.users.NewUserUpdateValidate; import com.wyh.front.validate.users.UserBindWechatValidate; import com.wyh.front.validate.users.UserPhoneBindValidate; import com.wyh.front.validate.users.UserUpdateValidate; +import com.wyh.front.vo.user.UserCenterVo; +import com.wyh.front.vo.user.UserInfoVo; /** * 用户服务接口类 diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java new file mode 100644 index 0000000..0a2ccd2 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java @@ -0,0 +1,95 @@ +package com.wyh.front.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.wyh.common.entity.UserGoods; +import com.wyh.common.entity.goods.Goods; +import com.wyh.common.mapper.UserGoodsMapper; +import com.wyh.common.mapper.goods.GoodsMapper; +import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.vo.CartVo; +import com.wyh.front.ZJFrontThreadLocal; +import com.wyh.front.service.CartService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class CartServiceImpl implements CartService { + @Resource + private UserGoodsMapper userGoodsMapper; + + @Resource + private GoodsMapper goodsMapper; + + + @Override + public void addCart( List cartCreateValited) { + Integer userId = ZJFrontThreadLocal.getUserId(); + for (UserGoodsCreateValidate userGoodsCreateValidate : cartCreateValited) { + Integer goodsId = userGoodsCreateValidate.getGoodsId(); + Goods goods = goodsMapper.selectById(goodsId); + Integer num = userGoodsCreateValidate.getNum(); + Integer isCheck = userGoodsCreateValidate.getIsCheck(); + UserGoods userGoods = new UserGoods(); + userGoods.setUserId(userId); + userGoods.setGoodsId(goodsId); + userGoods.setNum(num); + userGoods.setIsCheck(isCheck); + userGoods.setPrice(goods.getPrice().multiply(new BigDecimal(num))); + userGoodsMapper.insert(userGoods); + } + + } + + @Override + public CartVo getCart() { + Integer userId = ZJFrontThreadLocal.getUserId(); + List userGoodsList = userGoodsMapper.selectList(Wrappers.lambdaQuery().eq(UserGoods::getUserId, userId)); + if (userGoodsList.isEmpty()) { + return new CartVo(); + } + List ids + = userGoodsList.stream().map(UserGoods::getGoodsId).collect(Collectors.toList()); + + List goods = goodsMapper.selectList(Wrappers.lambdaQuery().in(Goods::getId, ids)); + BigDecimal totalPrice = new BigDecimal(0); + BigDecimal checkTotalPrice = new BigDecimal(0); + for (UserGoods userGoods : userGoodsList) { + Integer goodsId = userGoods.getGoodsId(); + for (Goods good : goods) { + if (good.getId().equals(goodsId)) { + BigDecimal price = good.getPrice().multiply(new BigDecimal(userGoods.getNum())); + totalPrice = totalPrice.add(price); + } + } + } + List collect = userGoodsList.stream().filter(item -> item.getIsCheck().equals(1)).collect(Collectors.toList()); + for (UserGoods userGoods : collect) { + Integer goodsId = userGoods.getGoodsId(); + for (Goods good : goods) { + if (good.getId().equals(goodsId)) { + BigDecimal price = good.getPrice().multiply(new BigDecimal(userGoods.getNum())); + checkTotalPrice = checkTotalPrice.add(price); + } + } + } + + CartVo cartVo = new CartVo(); + cartVo.setGoodsList(goods); + cartVo.setTotalPrice(totalPrice); + cartVo.setCheckTotalPrice(checkTotalPrice); + return cartVo; + } + + + public static void main(String[] args) { + Integer num = 3; + BigDecimal price = new BigDecimal(10.00); + BigDecimal result = price.multiply(new BigDecimal(num)); + System.out.println("result = " + result); + + } +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/UserServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/UserServiceImpl.java index 89b399e..7338bff 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/UserServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/UserServiceImpl.java @@ -16,15 +16,15 @@ import com.wyh.common.mapper.user.UserAuthMapper; import com.wyh.common.mapper.user.UserMapper; import com.wyh.common.plugin.notice.NoticeCheck; import com.wyh.common.plugin.wechat.WxMnpDriver; +import com.wyh.common.util.*; import com.wyh.front.ZJFrontThreadLocal; import com.wyh.front.service.IUserService; -import com.wyh.front.vo.user.UserCenterVo; -import com.wyh.front.vo.user.UserInfoVo; -import com.wyh.common.util.*; import com.wyh.front.validate.users.NewUserUpdateValidate; import com.wyh.front.validate.users.UserBindWechatValidate; import com.wyh.front.validate.users.UserPhoneBindValidate; import com.wyh.front.validate.users.UserUpdateValidate; +import com.wyh.front.vo.user.UserCenterVo; +import com.wyh.front.vo.user.UserInfoVo; import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService; diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/vo/AccessTokenVo.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/vo/AccessTokenVo.java new file mode 100644 index 0000000..9933ef6 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/vo/AccessTokenVo.java @@ -0,0 +1,10 @@ +package com.wyh.front.vo; + +import lombok.Data; + +@Data +public class AccessTokenVo { + + private String access_token; + private String expires_in; +} diff --git a/ZJ-java/ZJ-front/src/main/resources/application-dev.yml b/ZJ-java/ZJ-front/src/main/resources/application-dev.yml index e0f2b14..8b0bfba 100644 --- a/ZJ-java/ZJ-front/src/main/resources/application-dev.yml +++ b/ZJ-java/ZJ-front/src/main/resources/application-dev.yml @@ -12,17 +12,17 @@ spring: username: root # 数据库账号 password: ifpdge9z # 数据库密码 # Redis配置 - redis: - host: 101.133.172.2 # Redis服务地址 - port: 2007 # Redis端口 - password: 123456 # Redis密码 - database: 14 # 数据库索引 - # redis: -# host: 127.0.0.1 # Redis服务地址 -# port: 6379 # Redis端口 +# host: 101.133.172.2 # Redis服务地址 +# port: 2007 # Redis端口 # password: 123456 # Redis密码 -# database: 11 +# database: 14 # 数据库索引 + + redis: + host: 127.0.0.1 # Redis服务地址 + port: 6379 # Redis端口 + password: 123456 # Redis密码 + database: 11 # Mybatis-plus配置 【是否开启SQL日志输出】 #mybatis-plus: # configuration: diff --git a/ZJ-java/pom.xml b/ZJ-java/pom.xml index efc8518..0d30301 100644 --- a/ZJ-java/pom.xml +++ b/ZJ-java/pom.xml @@ -60,6 +60,16 @@ + + com.alibaba + fastjson + 1.2.75 + + + cn.mrzin + tool-wx + 1.0.1-SNAPSHOT + com.github.stuxuhai jpinyin diff --git a/admin/src/api/setting/website.ts b/admin/src/api/setting/website.ts index 294575b..8fddc65 100644 --- a/admin/src/api/setting/website.ts +++ b/admin/src/api/setting/website.ts @@ -25,3 +25,10 @@ export function getProtocol() { export function setProtocol(params: any) { return request.post({ url: '/setting/protocol/save', params }) } +// 获取政策协议 +export function getProtocolDetail() { + return request.get({ url: '/setting/protocol/getDetail' }) +} +export function saveDeatil(params: any) { + return request.post({ url: '/setting/protocol/saveDeatil', params }) +} \ No newline at end of file diff --git a/admin/src/views/basic/setting/protocol.vue b/admin/src/views/basic/setting/protocol.vue new file mode 100644 index 0000000..bcad8ef --- /dev/null +++ b/admin/src/views/basic/setting/protocol.vue @@ -0,0 +1,73 @@ + + + diff --git a/admin/src/views/goods/edit.vue b/admin/src/views/goods/edit.vue index 68e4624..0f5e110 100644 --- a/admin/src/views/goods/edit.vue +++ b/admin/src/views/goods/edit.vue @@ -35,7 +35,7 @@ - +
diff --git a/admin/src/views/setting/website/protocol.vue b/admin/src/views/setting/website/protocol.vue index 4bb9173..efaf389 100644 --- a/admin/src/views/setting/website/protocol.vue +++ b/admin/src/views/setting/website/protocol.vue @@ -2,7 +2,7 @@