diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterRest.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterRest.java index b48bbb12..1cd9cf8c 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterRest.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterRest.java @@ -90,7 +90,7 @@ public class DataCenterRest { @GetMapping("/getInventory") public ResultBean getInventory(String orderDate) { ResultBean rb = ResultBean.fireFail(); - Map pv = dataCenterService.getInventoryByOrderDate(orderDate); + List> pv = reportInventoryDayGatherService.getInventoryByOrderDate(orderDate); return rb.success().setData(pv); } } diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterService.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterService.java index d92e9295..6319cd32 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterService.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/datacenter/DataCenterService.java @@ -1,16 +1,21 @@ package com.yxt.supervise.report.biz.datacenter; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.supervise.report.api.dailysalesreport.DailySalesReport; import com.yxt.supervise.report.api.reportinventorydaygather.ReportInventoryDayGatherVo; import com.yxt.supervise.report.api.reportinventorydaystore.ReportInventoryDayStoreVo; import com.yxt.supervise.report.biz.dailysalesreport.DailySalesReportMapper; +import com.yxt.supervise.report.biz.reportinventory.ReportInventoryDayGather; import com.yxt.supervise.report.biz.reportinventory.ReportInventoryDayGatherService; import com.yxt.supervise.report.biz.reportinventory.ReportInventoryDayStoreService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -19,26 +24,5 @@ import java.util.Map; */ @Service public class DataCenterService extends MybatisBaseService { - @Autowired - ReportInventoryDayGatherService reportInventoryDayGatherService; - @Autowired - ReportInventoryDayStoreService reportInventoryDayStoreService; - public Map getInventoryByOrderDate(String orderDate) { - Map map=new HashMap<>(); - ReportInventoryDayGatherVo reportInventoryDayGatherVo=reportInventoryDayGatherService.getReportInventoryDayGather(orderDate); - ReportInventoryDayStoreVo reportInventoryDayStoreVo=reportInventoryDayStoreService.getReportInventoryDayStore(orderDate); - if(null!=reportInventoryDayGatherVo){ - map.put("changwencang",reportInventoryDayGatherVo.getCountAmount()); - }else{ - map.put("changwencang",0); - } - if (null!=reportInventoryDayStoreVo){ - map.put("mendian",reportInventoryDayStoreVo.getCountAmount()); - }else{ - map.put("mendian",0); - } - - return map; - } } diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectinformation/ProjectInformationRest.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectinformation/ProjectInformationRest.java new file mode 100644 index 00000000..9ebcf6ba --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectinformation/ProjectInformationRest.java @@ -0,0 +1,34 @@ +package com.yxt.supervise.report.biz.projectinformation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.report.feign.crm.projectinformation.ProjectInformationFeign; +import com.yxt.supervise.report.feign.crm.projectinformation.ProjectInformationQuery; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2023/4/12 17:10 + */ +@Api(tags = "项目信息") +@RestController +@RequestMapping("v1/projectinformation") +public class ProjectInformationRest { + @Autowired + ProjectInformationFeign projectInformationFeign; + + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage") + public ResultBean listPage(@RequestBody PagerQuery pq, @RequestHeader("token") String token) { + return projectInformationFeign.listPage(pq, token); + } + @GetMapping("/getProjectType") + public ResultBean getProjectType(){ + return projectInformationFeign.getProjectType(); + } +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectstatedictionary/ProjectStateDictionaryRest.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectstatedictionary/ProjectStateDictionaryRest.java new file mode 100644 index 00000000..c738de17 --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/projectstatedictionary/ProjectStateDictionaryRest.java @@ -0,0 +1,34 @@ +package com.yxt.supervise.report.biz.projectstatedictionary; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.supervise.report.feign.crm.projectstatedictionary.ProjectStateDictionaryFeign; +import com.yxt.supervise.report.feign.crm.projectstatedictionary.ProjectStateDictionaryVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2023/10/16 10:06 + */ +@Api(tags = "项目状态字典") +@RestController +@RequestMapping("projectstatedictionary") +public class ProjectStateDictionaryRest { + @Autowired + ProjectStateDictionaryFeign projectStateDictionaryFeign; + + @ApiOperation("查询全部") + @GetMapping("/listAll") + public ResultBean> listAll() { + ResultBean rb = ResultBean.fireFail(); + + return projectStateDictionaryFeign.listAll(); + } + +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherMapper.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherMapper.java index bc00f650..2638c161 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherMapper.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherMapper.java @@ -97,4 +97,6 @@ public interface ReportInventoryDayGatherMapper extends BaseMapper getReportInventoryByOrderDate(@Param(Constants.WRAPPER) Wrapper ew); + @Select("select * from report_inventory_day_gather where ${ew.sqlSegment}") + ReportInventoryDayGatherVo getInventoryByOrderDate(@Param(Constants.WRAPPER) Wrapper ew); } diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherService.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherService.java index f61693a8..a8c725bd 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherService.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/reportinventory/ReportInventoryDayGatherService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; @Service public class ReportInventoryDayGatherService extends ServiceImpl { @@ -88,46 +89,103 @@ public class ReportInventoryDayGatherService extends ServiceImpl getReportInventoryByOrderDate() { Map m=new HashMap<>(); - QueryWrapper qw = new QueryWrapper<>(); - QueryWrapper qw2 = new QueryWrapper<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String startDate=sdf.format(DateUtil.yesterday()); String EndDate=sdf.format(DateUtil.offsetDay(DateUtil.yesterday(),-14)); + long i=DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(EndDate), DateUnit.DAY); + + QueryWrapper qw = new QueryWrapper<>(); qw.le("STR_TO_DATE(orderDate,'%Y-%m-%d')",startDate); qw.ge("STR_TO_DATE(orderDate,'%Y-%m-%d')",EndDate); qw.eq("storeType","[101]365常温仓"); List changwencang=baseMapper.getReportInventoryByOrderDate(qw); + QueryWrapper qw2 = new QueryWrapper<>(); qw2.le("STR_TO_DATE(orderDate,'%Y-%m-%d')",startDate); qw2.ge("STR_TO_DATE(orderDate,'%Y-%m-%d')",EndDate); - qw2.eq("storeType","[112]供应链仓"); - List gongyinglian=baseMapper.getReportInventoryByOrderDate(qw2); - - + qw2.eq("storeType","36524集团门店仓"); + List mendian=baseMapper.getReportInventoryByOrderDate(qw2); + + QueryWrapper qw3 = new QueryWrapper<>(); + qw3.le("STR_TO_DATE(orderDate,'%Y-%m-%d')",startDate); + qw3.ge("STR_TO_DATE(orderDate,'%Y-%m-%d')",EndDate); + qw3.eq("storeType","36524集团烟草门店仓"); + List ycMendian=baseMapper.getReportInventoryByOrderDate(qw3); + + QueryWrapper qw4 = new QueryWrapper<>(); + qw4.le("STR_TO_DATE(orderDate,'%Y-%m-%d')",startDate); + qw4.ge("STR_TO_DATE(orderDate,'%Y-%m-%d')",EndDate); + qw4.eq("storeType","[112]供应链仓"); + List gongyinglian=baseMapper.getReportInventoryByOrderDate(qw4); + + QueryWrapper qw5 = new QueryWrapper<>(); + qw5.le("STR_TO_DATE(orderDate,'%Y-%m-%d')",startDate); + qw5.ge("STR_TO_DATE(orderDate,'%Y-%m-%d')",EndDate); + qw5.eq("storeType","[199]365配送残品仓"); + List cancipin=baseMapper.getReportInventoryByOrderDate(qw5); List a=new ArrayList<>(); List b=new ArrayList<>(); List c=new ArrayList<>(); + List d=new ArrayList<>(); + List e=new ArrayList<>(); + List f=new ArrayList<>(); //14 - long i=DateUtil.between(DateUtil.parse(startDate),DateUtil.parse(EndDate), DateUnit.DAY); + for(int k=0;k> getInventoryByOrderDate(String orderDate) { + List> maps=new ArrayList<>(); + QueryWrapper qw = new QueryWrapper<>(); + + qw.eq("STR_TO_DATE(orderDate,'%Y-%m-%d')",orderDate); + + List vos=baseMapper.getReportInventoryByOrderDate(qw); + for(ReportInventoryDayGatherVo vo:vos){ + Map map=new HashMap<>(); + map.put("name",vo.getStoreType()); + map.put("amount",vo.getProductAmount()); + maps.add(map); + } + return maps; + } } diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/sysorganization/SysOrganizationRest.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/sysorganization/SysOrganizationRest.java new file mode 100644 index 00000000..47e2676e --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/sysorganization/SysOrganizationRest.java @@ -0,0 +1,48 @@ +package com.yxt.supervise.report.biz.sysorganization; + +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.report.feign.system.sysorganization.SysOrganizationFeign; +import com.yxt.supervise.system.sysorganization.SysOrganizationVo; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2023/11/6 15:36 + */ +@RestController("com.yxt.supervise.crm.biz.system.SysOrganizationRest") +@RequestMapping("v1/sysorganization") +public class SysOrganizationRest { + @Autowired + SysOrganizationFeign sysOrganizationFeign; + @ApiOperation("获取组织结构某一组织") + @GetMapping("/getUserListByOrg/{orgCode}") + public ResultBean> getUserListByOrg(@PathVariable("orgCode")String orgCode){ + return sysOrganizationFeign.getUserListByOrg(orgCode); + } + + /** + * 获取组织结构下人员信息 + * @return + */ + @ApiOperation("获取组织结构下关联项目人员信息") + @GetMapping("/associationUserList/{projectSid}") + public ResultBean> associationUserList(@PathVariable("projectSid") String projectSid){ + return sysOrganizationFeign.associationUserList(projectSid); + }; + /** + * 获取组织结构下人员信息 + * @return + */ + @ApiOperation("获取组织结构下人员信息") + @GetMapping("/userList/{projectSid}") + public ResultBean> userList(@PathVariable("projectSid")String projectSid){ + return sysOrganizationFeign.userList(projectSid); + }; +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/wechat/WechatService.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/wechat/WechatService.java index ae805af7..5f0febbc 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/wechat/WechatService.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/biz/wechat/WechatService.java @@ -375,20 +375,21 @@ public class WechatService { List mobiles=new ArrayList<>(); openIds.add("oGdho60xVtWEXUks7nYEAn0tGlDE"); mobiles.add("15932270269"); - openIds.add("oGdho66394A-4-NyumcJ1MEaT8Lo"); - mobiles.add("18603312020"); - openIds.add("oGdho615_xBMYYwftEjjBlC6p2uE"); - mobiles.add("13513219196"); - openIds.add("oGdho6yYB47f52HVk2NqirrFbRRk"); - mobiles.add("13513211777"); openIds.add("oGdho668Hew45t0xfBJC84TNGVzI"); mobiles.add("13623307393"); openIds.add("oGdho68CArVhC_-7ELkG-jX21ruk"); mobiles.add("13131170271"); - openIds.add("oGdho69VxJil_NRxv9StYVpQg58U"); - mobiles.add("13333113292"); - openIds.add("oGdho66Wy-Or1UeqoNHU1YL5yAEM"); - mobiles.add("19933133338"); +// openIds.add("oGdho66394A-4-NyumcJ1MEaT8Lo"); +// mobiles.add("18603312020"); +// openIds.add("oGdho615_xBMYYwftEjjBlC6p2uE"); +// mobiles.add("13513219196"); +// openIds.add("oGdho6yYB47f52HVk2NqirrFbRRk"); +// mobiles.add("13513211777"); + +// openIds.add("oGdho69VxJil_NRxv9StYVpQg58U"); +// mobiles.add("13333113292"); +// openIds.add("oGdho66Wy-Or1UeqoNHU1YL5yAEM"); +// mobiles.add("19933133338"); // for(UserProject u:user){ // SysUser sysUser=systemMapper.getAppletOpenidByUsersid(u.getUserSid()); // if(null!=sysUser) { diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationFeign.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationFeign.java index 6f699649..f37218c4 100644 --- a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationFeign.java +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationFeign.java @@ -19,7 +19,11 @@ import java.util.List; name = "supervise-crm", path = "v1/projectinformation") public interface ProjectInformationFeign { - + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage") + public ResultBean> listPage(@RequestBody PagerQuery pq,@RequestHeader("token") String token); + @GetMapping("/getProjectType") + public ResultBean getProjectType(); @ApiOperation("查询全部") @GetMapping("/listAll") public ResultBean> listAll(@RequestHeader("token") String token); diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationQuery.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationQuery.java new file mode 100644 index 00000000..68f879d6 --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectinformation/ProjectInformationQuery.java @@ -0,0 +1,33 @@ +package com.yxt.supervise.report.feign.crm.projectinformation; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +/** + * @author wangpengfei + * @date 2023/4/25 9:29 + */ +@ApiModel(value = "项目信息 查询条件", description = "项目信息 查询条件") +@Data +public class ProjectInformationQuery implements Query { + private String id; + private String sid; + private String entryName; + private String engaDate; + private String creditLimit; + private String signingDate; + private String endDate; + private String regulatoryLeader; + private String generalManager; + private String fillInDate; + private String bankSid; + private String bManagerSid; + private String enterpriseSid; + private String industrySid; + private String typeSid; + private String remarks; + private String projectType; + private String bankName; + private String stateSid; +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryFeign.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryFeign.java new file mode 100644 index 00000000..c328f285 --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryFeign.java @@ -0,0 +1,22 @@ +package com.yxt.supervise.report.feign.crm.projectstatedictionary; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2023/11/15 11:40 + */ +@FeignClient( + contextId = "supervise-crm-projectstatedictionary", + name = "supervise-crm", + path = "projectstatedictionary") +public interface ProjectStateDictionaryFeign { + @ApiOperation("查询全部") + @GetMapping("/listAll") + public ResultBean> listAll(); +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryVo.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryVo.java new file mode 100644 index 00000000..7ab7b058 --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/crm/projectstatedictionary/ProjectStateDictionaryVo.java @@ -0,0 +1,16 @@ +package com.yxt.supervise.report.feign.crm.projectstatedictionary; + +import com.yxt.common.core.query.Query; +import lombok.Data; + +/** + * @author wangpengfei + * @date 2023/10/16 10:05 + */ +@Data +public class ProjectStateDictionaryVo implements Query { + private String id; + private String sid; + private String name; + private String remarks; +} diff --git a/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/system/sysorganization/SysOrganizationFeign.java b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/system/sysorganization/SysOrganizationFeign.java new file mode 100644 index 00000000..521cb922 --- /dev/null +++ b/yxt_supervise/supervise-report/supervise-report-biz/src/main/java/com/yxt/supervise/report/feign/system/sysorganization/SysOrganizationFeign.java @@ -0,0 +1,46 @@ +package com.yxt.supervise.report.feign.system.sysorganization; + +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.system.sysorganization.SysOrganizationVo; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2023/10/7 15:31 + */ +@FeignClient( + contextId = "supervise-system-sysorganization", + name = "supervise-system", + path = "v1/sysorganization") +public interface SysOrganizationFeign { + @ApiOperation("获取组织结构下人员信息") + @GetMapping("/userList") + public ResultBean> userList(); + @ApiOperation("获取一条记录 根据sid") + @ResponseBody + @GetMapping("/fetchBySid/{sid}") + public ResultBean fetchBySid(@PathVariable("sid") String sid); + @ApiOperation("获取组织结构某一组织") + @GetMapping("/getUserListByOrg/{orgCode}") + public ResultBean> getUserListByOrg(@PathVariable("orgCode")String orgCode); + /** + * 获取组织结构下人员信息 + * @return + */ + @ApiOperation("获取组织结构下关联项目人员信息") + @GetMapping("/associationUserList/{projectSid}") + public ResultBean> associationUserList(@PathVariable("projectSid") String projectSid); + /** + * 获取组织结构下人员信息 + * @return + */ + @ApiOperation("获取组织结构下人员信息") + @GetMapping("/userList/{projectSid}") + public ResultBean> userList(@PathVariable("projectSid")String projectSid); +}