diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxInstrument.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxInstrument.java index 31f2fc0..87004da 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxInstrument.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxInstrument.java @@ -1,5 +1,7 @@ package com.flossom.common.core.domain.entity; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -74,14 +76,14 @@ public class WxInstrument extends BaseEntity { /** * 额外打卡时间开始 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date startTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; /** * 额外打卡时间结束 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date endTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; /** * 标签ID(xxxx,xxxx,xxx) @@ -116,8 +118,8 @@ public class WxInstrument extends BaseEntity { /** * 护理时长 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date nursingTime; + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime nursingTime; /** * iot版本 @@ -264,19 +266,19 @@ public class WxInstrument extends BaseEntity { return extraClockCredit; } - public void setStartTime(Date startTime) { + public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; } - public Date getStartTime() { + public LocalDateTime getStartTime() { return startTime; } - public void setEndTime(Date endTime) { + public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; } - public Date getEndTime() { + public LocalDateTime getEndTime() { return endTime; } @@ -328,11 +330,11 @@ public class WxInstrument extends BaseEntity { return sceneNames; } - public void setNursingTime(Date nursingTime) { + public void setNursingTime(LocalTime nursingTime) { this.nursingTime = nursingTime; } - public Date getNursingTime() { + public LocalTime getNursingTime() { return nursingTime; } diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxInstrumentSaveReq.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxInstrumentSaveReq.java new file mode 100644 index 0000000..335ab96 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxInstrumentSaveReq.java @@ -0,0 +1,388 @@ +package com.flossom.common.core.domain.req; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.flossom.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Date; +import java.util.List; + +/** + * 仪器列对象 wx_instrument 保存对象 + * + * @author flossom + * @date 2024-01-06 + */ +public class WxInstrumentSaveReq { + + /** + * 仪器ID + */ + private Long id; + + /** + * 仪器名称 + */ + @NotBlank(message = "请输入仪器名称") + @Length(min = 1, message = "请输入仪器名称") + private String name; + + /** + * 仪器:1、普通仪器 2、iot仪器 + */ + @NotBlank(message = "请选择仪器类型") + private Integer type; + + /** + * iot仪器特有:仪器型号 + */ + @NotBlank(message = "请输入仪器型号") + @Length(min = 1, message = "请输入仪器型号") + private String model; + + /** + * 仪器封面(图片地址) + */ + @NotBlank(message = "请上传仪器封面") + private String banner; + + /** + * 仪器logo图(图片地址) + */ + @NotBlank(message = "请上传仪器logo") + private String logo; + + /** + * 序列号位置图片(图片地址) + */ + @NotBlank(message = "请上传仪器序列号图片") + private String serial; + + /** + * 保修日期 + */ + @NotNull(message = "请输入保修日期") + private Long guarantee; + + /** + * 日常打卡获得积分 + */ + @NotNull(message = "请输入日常打卡获得积分") + private Long dailyClockCredit; + + /** + * 额外打卡奖励积分 + */ + private Long extraClockCredit; + + /** + * 是否开启额外打卡奖励 + */ + @NotNull(message = "请选择是否开启额外打卡奖励") + private Long isExtraClock; + + @NotNull(message = "请选择额外打卡时间范围") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private List extraClockTimeRange; + + /** + * 场景ID(xxxx,xxxx,xxx) + */ + private String sceneIds; + + /** + * 场景名称(xxx,xxx,xxx) + */ + private String sceneNames; + + /** + * 护理时长 + */ + @NotNull(message = "请选择护理时间") + @JsonFormat(pattern = "HH:mm:ss") + private LocalTime nursingTime; + + /** + * iot版本 + */ + private String iotVersion; + + /** + * iot升级数据文件 + */ + private String iotUpgradeData; + + /** + * 是否开启扫机身码:0、关闭 1、开启 + */ + private Integer isScanCode; + + /** + * 是否支持购买:0、不支持 1、支持 + */ + @NotNull(message = "请选择是否支持购买") + private Integer isPurchase; + + /** + * 商城小程序appid + */ + private String shoppingAppid; + + /** + * 商城小程序path + */ + private String shoppingPath; + + /** + * 蓝牙连接中图片 + */ + private String bluetoothConnecting; + + /** + * 蓝牙关闭图片 + */ + private String bluetoothClosed; + + /** + * iot版本升级说明 + */ + private String iotVersionUpgrade; + + /** + * 排序:值越大,排序越前 + */ + @NotNull(message = "请输入排序") + private Long sortNo; + + /** + * 手动绑定介绍图片 + */ + private String manualCodeBinding; + + /** + * 扫码绑定介绍图片 + */ + private String scanCodeBinding; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getBanner() { + return banner; + } + + public void setBanner(String banner) { + this.banner = banner; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getSerial() { + return serial; + } + + public void setSerial(String serial) { + this.serial = serial; + } + + public Long getGuarantee() { + return guarantee; + } + + public void setGuarantee(Long guarantee) { + this.guarantee = guarantee; + } + + public Long getDailyClockCredit() { + return dailyClockCredit; + } + + public void setDailyClockCredit(Long dailyClockCredit) { + this.dailyClockCredit = dailyClockCredit; + } + + public Long getExtraClockCredit() { + return extraClockCredit; + } + + public void setExtraClockCredit(Long extraClockCredit) { + this.extraClockCredit = extraClockCredit; + } + + public Long getIsExtraClock() { + return isExtraClock; + } + + public void setIsExtraClock(Long isExtraClock) { + this.isExtraClock = isExtraClock; + } + + public List getExtraClockTimeRange() { + return extraClockTimeRange; + } + + public void setExtraClockTimeRange(List extraClockTimeRange) { + this.extraClockTimeRange = extraClockTimeRange; + } + + public String getSceneIds() { + return sceneIds; + } + + public void setSceneIds(String sceneIds) { + this.sceneIds = sceneIds; + } + + public String getSceneNames() { + return sceneNames; + } + + public void setSceneNames(String sceneNames) { + this.sceneNames = sceneNames; + } + + public LocalTime getNursingTime() { + return nursingTime; + } + + public void setNursingTime(LocalTime nursingTime) { + this.nursingTime = nursingTime; + } + + public String getIotVersion() { + return iotVersion; + } + + public void setIotVersion(String iotVersion) { + this.iotVersion = iotVersion; + } + + public String getIotUpgradeData() { + return iotUpgradeData; + } + + public void setIotUpgradeData(String iotUpgradeData) { + this.iotUpgradeData = iotUpgradeData; + } + + public Integer getIsScanCode() { + return isScanCode; + } + + public void setIsScanCode(Integer isScanCode) { + this.isScanCode = isScanCode; + } + + public Integer getIsPurchase() { + return isPurchase; + } + + public void setIsPurchase(Integer isPurchase) { + this.isPurchase = isPurchase; + } + + public String getShoppingAppid() { + return shoppingAppid; + } + + public void setShoppingAppid(String shoppingAppid) { + this.shoppingAppid = shoppingAppid; + } + + public String getShoppingPath() { + return shoppingPath; + } + + public void setShoppingPath(String shoppingPath) { + this.shoppingPath = shoppingPath; + } + + public String getBluetoothConnecting() { + return bluetoothConnecting; + } + + public void setBluetoothConnecting(String bluetoothConnecting) { + this.bluetoothConnecting = bluetoothConnecting; + } + + public String getBluetoothClosed() { + return bluetoothClosed; + } + + public void setBluetoothClosed(String bluetoothClosed) { + this.bluetoothClosed = bluetoothClosed; + } + + public String getIotVersionUpgrade() { + return iotVersionUpgrade; + } + + public void setIotVersionUpgrade(String iotVersionUpgrade) { + this.iotVersionUpgrade = iotVersionUpgrade; + } + + public Long getSortNo() { + return sortNo; + } + + public void setSortNo(Long sortNo) { + this.sortNo = sortNo; + } + + public String getManualCodeBinding() { + return manualCodeBinding; + } + + public void setManualCodeBinding(String manualCodeBinding) { + this.manualCodeBinding = manualCodeBinding; + } + + public String getScanCodeBinding() { + return scanCodeBinding; + } + + public void setScanCodeBinding(String scanCodeBinding) { + this.scanCodeBinding = scanCodeBinding; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentMapper.java index c2ad68b..45a6971 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentMapper.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentMapper.java @@ -60,7 +60,7 @@ public interface WxInstrumentMapper { * @param ids 需要删除的数据主键集合 * @return 结果 */ - public int deleteWxInstrumentByIds(Long[] ids); + public int deleteWxInstrumentByIds(Long id); } diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentMapper.xml index ccb6342..e8e048f 100644 --- a/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentMapper.xml +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentMapper.xml @@ -233,10 +233,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from wx_instrument where id = #{id} - - delete from wx_instrument where id in - - #{id} - + + UPDATE wx_instrument SET status = IF(status = 1, 0, 1) where id = #{id} \ No newline at end of file diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxInstrumentController.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxInstrumentController.java index 7dde24e..489568b 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxInstrumentController.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxInstrumentController.java @@ -2,12 +2,16 @@ package com.flossom.system.controller; import com.flossom.common.core.domain.entity.WxInstrument; import com.flossom.common.core.domain.req.WxInstrumentReq; +import com.flossom.common.core.domain.req.WxInstrumentSaveReq; +import com.flossom.common.core.exception.ServiceException; +import com.flossom.common.core.utils.StringUtils; import com.flossom.common.core.web.controller.BaseController; import com.flossom.common.core.web.domain.AjaxResult; import com.flossom.common.core.web.page.TableDataInfo; import com.flossom.common.log.annotation.Log; import com.flossom.common.log.enums.BusinessType; import com.flossom.common.security.annotation.RequiresPermissions; +import com.flossom.common.security.utils.SecurityUtils; import com.flossom.system.service.IWxInstrumentService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -61,7 +65,43 @@ public class WxInstrumentController extends BaseController { @RequiresPermissions("system:instrument:add") @Log(title = "仪器列", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody WxInstrument wxInstrument) { + public AjaxResult add(@RequestBody WxInstrumentSaveReq wxInstrumentSaveReq) { + // 开启额外打开奖励 + if (wxInstrumentSaveReq.getIsExtraClock() == 1) { + if (wxInstrumentSaveReq.getExtraClockCredit() == null + || wxInstrumentSaveReq.getExtraClockTimeRange() == null + || wxInstrumentSaveReq.getExtraClockTimeRange().size() != 2) { + throw new ServiceException("请输入额外打卡奖励或者选择额外打卡时间"); + } + } else { + wxInstrumentSaveReq.setExtraClockCredit(null); + wxInstrumentSaveReq.setExtraClockTimeRange(null); + } + + // 仪器类型:IOT仪器 + if (wxInstrumentSaveReq.getType() == 2) { + if (StringUtils.isBlank(wxInstrumentSaveReq.getModel())) { + throw new ServiceException("请选择仪器类型"); + } + } else { + wxInstrumentSaveReq.setModel(null); + } + + // 支持购买 + if (wxInstrumentSaveReq.getIsPurchase() == 1) { + if (StringUtils.isBlank(wxInstrumentSaveReq.getShoppingAppid()) + || StringUtils.isBlank(wxInstrumentSaveReq.getShoppingPath())) { + throw new ServiceException("请输入购买商城APPID和商城PATH"); + } + } else { + wxInstrumentSaveReq.setShoppingAppid(null); + wxInstrumentSaveReq.setShoppingPath(null); + } + WxInstrument wxInstrument = new WxInstrument(); + BeanUtils.copyProperties(wxInstrumentSaveReq, wxInstrument); + wxInstrument.setStartTime(wxInstrumentSaveReq.getExtraClockTimeRange().get(0)); + wxInstrument.setEndTime(wxInstrumentSaveReq.getExtraClockTimeRange().get(1)); + wxInstrument.setCreateBy(SecurityUtils.getUsername()); return toAjax(wxInstrumentService.insertWxInstrument(wxInstrument)); } @@ -76,12 +116,12 @@ public class WxInstrumentController extends BaseController { } /** - * 删除仪器列 + * 隐藏仪器 */ @RequiresPermissions("system:instrument:remove") @Log(title = "仪器列", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(wxInstrumentService.deleteWxInstrumentByIds(ids)); + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable Long id) { + return toAjax(wxInstrumentService.deleteWxInstrumentByIds(id)); } } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxInstrumentService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxInstrumentService.java index af37334..5f26939 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxInstrumentService.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxInstrumentService.java @@ -58,7 +58,7 @@ public interface IWxInstrumentService { * @param ids 需要删除的仪器列主键集合 * @return 结果 */ - public int deleteWxInstrumentByIds(Long[] ids); + public int deleteWxInstrumentByIds(Long id); /** * 删除仪器列信息 diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxInstrumentServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxInstrumentServiceImpl.java index 5547f71..5d545ff 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxInstrumentServiceImpl.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxInstrumentServiceImpl.java @@ -1,9 +1,12 @@ package com.flossom.system.service.impl; +import java.util.Arrays; import java.util.List; +import com.flossom.common.core.domain.entity.SysTag; import com.flossom.common.core.domain.entity.WxInstrument; import com.flossom.common.core.domain.req.WxInstrumentReq; +import com.flossom.common.core.mapper.SysTagMapper; import com.flossom.common.core.mapper.WxInstrumentMapper; import com.flossom.common.core.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +25,9 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { @Autowired private WxInstrumentMapper wxInstrumentMapper; + @Autowired + private SysTagMapper sysTagMapper; + /** * 查询仪器列 * @@ -69,6 +75,31 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { */ @Override public int updateWxInstrument(WxInstrument wxInstrument) { + // 处理小程序标签和企微标签 + if (wxInstrument.getMiniTagIds() != null) { + List tagIdList = Arrays.asList(wxInstrument.getMiniTagIds().split(",")); + StringBuilder tagNames = new StringBuilder(); + for (int i = 0; i < tagIdList.size(); i++) { + SysTag sysTag = sysTagMapper.selectDeptById(Long.valueOf(tagIdList.get(i))); + tagNames.append(sysTag.getTagName()); + if (i < tagIdList.size() - 1) { + tagNames.append(","); + } + } + wxInstrument.setMiniTagNames(tagNames.toString()); + } + if (wxInstrument.getWecomTagIds() != null) { + List tagIdList = Arrays.asList(wxInstrument.getWecomTagIds().split(",")); + StringBuilder tagNames = new StringBuilder(); + for (int i = 0; i < tagIdList.size(); i++) { + SysTag sysTag = sysTagMapper.selectDeptById(Long.valueOf(tagIdList.get(i))); + tagNames.append(sysTag.getTagName()); + if (i < tagIdList.size() - 1) { + tagNames.append(","); + } + } + wxInstrument.setWecomTagNames(tagNames.toString()); + } wxInstrument.setUpdateTime(DateUtils.getNowDate()); return wxInstrumentMapper.updateWxInstrument(wxInstrument); } @@ -80,8 +111,8 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { * @return 结果 */ @Override - public int deleteWxInstrumentByIds(Long[] ids) { - return wxInstrumentMapper.deleteWxInstrumentByIds(ids); + public int deleteWxInstrumentByIds(Long id) { + return wxInstrumentMapper.deleteWxInstrumentByIds(id); } /** diff --git a/flossom-ui/src/api/system/instrument.js b/flossom-ui/src/api/system/instrument.js index ef515ff..7cda1b4 100644 --- a/flossom-ui/src/api/system/instrument.js +++ b/flossom-ui/src/api/system/instrument.js @@ -42,3 +42,25 @@ export function delInstrument(id) { method: 'delete' }) } + +/* 获取小程序标签树 */ +export function getMiniProgramTagTree() { + return request({ + url: '/system/tagInfo/tagTree', + method: 'get', + params: { + type: 1 + } + }) +} + +/* 获取企微标签树 */ +export function getWecomTagTree() { + return request({ + url: '/system/tagInfo/tagTree', + method: 'get', + params: { + type: 2 + } + }) +} diff --git a/flossom-ui/src/views/system/instrument/index.vue b/flossom-ui/src/views/system/instrument/index.vue index 8aa30e3..a6865c8 100644 --- a/flossom-ui/src/views/system/instrument/index.vue +++ b/flossom-ui/src/views/system/instrument/index.vue @@ -135,10 +135,7 @@ width="150px" > @@ -150,10 +147,7 @@ width="150px" > @@ -184,11 +178,19 @@ v-hasPermi="['system:instrument:edit']" >编辑 - 设置小程序可见标签 - 设置微信可见标签 + 设置企微可见标签 正品控名称配置 @@ -202,8 +204,18 @@ icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:instrument:remove']" + v-if="scope.row.status == 0" >隐藏 + 解除隐藏 + @@ -427,6 +439,7 @@ :inactive-value="0" active-color="#13ce66" inactive-color="#DCDCDC" + @change="isExtraClockChange" > @@ -458,7 +471,11 @@ - + @@ -507,15 +524,19 @@ - + @@ -576,7 +597,10 @@ @@ -584,7 +608,11 @@ @@ -641,7 +669,10 @@ @@ -649,7 +680,11 @@ @@ -717,23 +752,91 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + +