From a74b5ffd9c25edd8096220920934e3e42f62cc23 Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期四, 25 四月 2024 17:06:08 +0800 Subject: [PATCH] zjh 2024/04/25-1 --- ltkj-admin/src/test/java/zjhTest.java | 19 +-- ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdvice.java | 23 ++++ ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjUserAdviceServiceImpl.java | 11 ++ ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjAdviceController.java | 155 ++++++++++++++++++++++++++---- ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjAdviceKjbqServiceImpl.java | 11 ++ ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java | 1 ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjAdviceKjbqService.java | 7 + ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdviceKjbq.java | 25 +++++ ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjUserAdviceMapper.java | 9 + ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjUserAdvice.java | 20 ++++ ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjUserAdviceService.java | 7 + ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjAdviceKjbqMapper.java | 9 + 12 files changed, 260 insertions(+), 37 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjAdviceController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjAdviceController.java index 746c397..8ee6169 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjAdviceController.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjAdviceController.java @@ -1,5 +1,6 @@ package com.ltkj.web.controller.system; +import java.nio.channels.NonReadableChannelException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -11,14 +12,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ltkj.common.annotation.Excel; import com.ltkj.common.utils.poi.ExcelUtil; import com.ltkj.hosp.domain.TjAdvice; +import com.ltkj.hosp.domain.TjAdviceKjbq; import com.ltkj.hosp.domain.TjProject; +import com.ltkj.hosp.domain.TjUserAdvice; import com.ltkj.hosp.service.ITjAdviceService; import com.ltkj.hosp.service.ITjProjectService; +import com.ltkj.hosp.service.TjAdviceKjbqService; +import com.ltkj.hosp.service.TjUserAdviceService; +import com.ltkj.system.service.ISysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import com.ltkj.common.annotation.Log; @@ -34,11 +42,112 @@ @RestController @RequestMapping("/advice/advice") @Api(tags = "浣撴寤鸿绠$悊鎺ュ彛") -public class TjAdviceController{ +public class TjAdviceController { @Resource private ITjAdviceService tjAdviceService; @Resource private ITjProjectService tjProjectService; + @Resource + private TjAdviceKjbqService kjbqService; + @Resource + private TjUserAdviceService userAdviceService; + @Autowired + private ISysUserService userService; + + @PostMapping("/addTjAdviceKjbq") + @ApiOperation(value = "鏂板浣撴寤鸿蹇嵎鏍囩鎺ュ彛") + public AjaxResult addTjAdviceKjbq(@RequestBody TjAdviceKjbq adviceKjbq) { + return AjaxResult.success(kjbqService.save(adviceKjbq)); + } + + @DeleteMapping("/deletedTjAdviceKjbq") + @ApiOperation(value = "鏍规嵁id鍒犻櫎浣撴寤鸿蹇嵎鏍囩鎺ュ彛") + public AjaxResult deletedTjAdviceKjbq(@RequestParam Long adviceKjbqId) { + return AjaxResult.success(kjbqService.removeById(adviceKjbqId)); + } + + @PutMapping("/updateTjAdviceKjbq") + @ApiOperation(value = "淇敼浣撴寤鸿蹇嵎鏍囩鎺ュ彛") + public AjaxResult updateTjAdviceKjbq(@RequestBody TjAdviceKjbq adviceKjbq) { + return AjaxResult.success(kjbqService.updateById(adviceKjbq)); + } + + @PostMapping("/updateQybzTjAdviceKjbqById") + @ApiOperation(value = "淇敼浣撴寤鸿蹇嵎鏍囩鍚敤鐘舵�佹帴鍙�") + public AjaxResult updateQybzTjAdviceKjbqById(@RequestParam int qybz,@RequestParam Long id) { + TjAdviceKjbq kjbq = kjbqService.getById(id); + kjbq.setQyzt(String.valueOf(qybz)); + return AjaxResult.success(kjbqService.updateById(kjbq)); + } + + @GetMapping("/getTjAdviceKjbqByFl") + @ApiOperation(value = "鏍规嵁鏍囩鍒嗙被鏌ヨ浣撴寤鸿蹇嵎鏍囩鎺ュ彛") + public AjaxResult getTjAdviceKjbqByFl(@RequestParam(required = false)@ApiParam(value = "鐢ㄦ埛id 浼犲綋鍓嶇櫥褰曚汉 瓒呯鐧诲綍鏃朵笉浼� 涓簄ull") String userId, + @RequestParam(required = false)@ApiParam(value = "鍚敤鐘舵�� 0鍚敤 1鍋滅敤") Integer qyzt, + @ApiParam(value = "椤电爜鏁�(榛樿1)") @RequestParam(defaultValue = "1") Integer page, + @ApiParam(value = "鏄剧ず鏉℃暟(榛樿10)") @RequestParam(defaultValue = "10") Integer pageSize) { + LambdaQueryWrapper<TjAdviceKjbq> wq = new LambdaQueryWrapper<>(); + Page<TjAdviceKjbq> page1=new Page<>(page,pageSize); + if (null != userId && !userId.equals("")) { + wq.eq(TjAdviceKjbq::getUserId, userId); + } + if (null != qyzt) { + wq.eq(TjAdviceKjbq::getQyzt,qyzt); + } + Page<TjAdviceKjbq> kjbqPage = kjbqService.page(page1, wq); + if(null !=kjbqPage.getRecords() && kjbqPage.getRecords().size()>0){ + for (TjAdviceKjbq record : kjbqPage.getRecords()) { + if(null !=record.getUserId()){ + record.setUserName(userService.getById(record.getUserId()).getNickName()); + } + + } + } + return AjaxResult.success(kjbqPage); + } + + + @GetMapping("/getKjTjAdviceKjbqBySex") + @ApiOperation(value = "鏍规嵁浣撴浜烘�у埆鍜屾槸鍚︿负鎬绘鏌ヨ浣撴寤鸿鎺ュ彛") + public AjaxResult getKjTjAdviceKjbqBySex(@RequestParam String sex, @RequestParam @ApiParam(value = "0甯歌鍖荤敓 1鎬绘") String isZj, + @ApiParam(value = "椤电爜鏁�(榛樿1)") @RequestParam(defaultValue = "1") Integer page, + @ApiParam(value = "鏄剧ず鏉℃暟(榛樿10)") @RequestParam(defaultValue = "10") Integer pageSize) { + LambdaQueryWrapper<TjAdvice> wq = new LambdaQueryWrapper<>(); + Page<TjAdvice> page1=new Page<>(page,pageSize); + wq.eq(TjAdvice::getAdSex, sex); + wq.eq(TjAdvice::getIsZj, isZj); + Page<TjAdvice> kjbqPage = tjAdviceService.page(page1, wq); + return AjaxResult.success(kjbqPage); + } + + + + + @GetMapping("/getCyTjAdviceKjbqBySex") + @ApiOperation(value = "鏍规嵁褰撳墠鐧诲綍浜篿d鑾峰彇甯哥敤寤鸿") + public AjaxResult getCyTjAdviceKjbqBySex(@RequestParam String sex,@RequestParam @ApiParam(value = "鐢ㄦ埛id 浼犲綋鍓嶇櫥褰曚汉") Long userId, + @ApiParam(value = "椤电爜鏁�(榛樿1)") @RequestParam(defaultValue = "1") Integer page, + @ApiParam(value = "鏄剧ず鏉℃暟(榛樿10)") @RequestParam(defaultValue = "10") Integer pageSize) { + LambdaQueryWrapper<TjAdvice> wq = new LambdaQueryWrapper<>(); + Page<TjAdvice> page1=new Page<>(page,pageSize); + wq.eq(TjAdvice::getAdSex, sex); + if (null != userId) { + LambdaQueryWrapper<TjUserAdvice> wq0=new LambdaQueryWrapper<>(); + wq0.eq(TjUserAdvice::getUserId,userId); + List<TjUserAdvice> list = userAdviceService.list(wq0); + if(null !=list && list.size()>0){ + List<Long> longs = list.stream().map(TjUserAdvice::getAdviceId).collect(Collectors.toList()); + wq.in(TjAdvice::getId, longs); + Page<TjAdvice> kjbqPage = tjAdviceService.page(page1, wq); + return AjaxResult.success(kjbqPage); + } + + } + return AjaxResult.success("璇ョ敤鎴锋殏鏃舵病鏈夊父鐢ㄥ缓璁�!"); + } + + + /** * 鏌ヨadvice鍒楄〃 @@ -47,38 +156,38 @@ @GetMapping("/list") @ApiOperation(value = "浣撴寤鸿鍒楄〃鏌ヨ") public AjaxResult list(@RequestParam(required = false) @ApiParam(value = "椤圭洰鍚�") String proName, - @ApiParam(value = "椤电爜鏁�(榛樿1)") @RequestParam(defaultValue = "1") Integer page, - @ApiParam(value = "鏄剧ず鏉℃暟(榛樿10)") @RequestParam(defaultValue = "10") Integer pageSize) { - Page<TjAdvice>page1=new Page<>(page,pageSize); - Map<String,Object> map=new HashMap<>(); - List<TjAdvice> list =null; - long total =0; - if(null !=proName){ - LambdaQueryWrapper<TjProject> wq=new LambdaQueryWrapper<>(); - list=new ArrayList<>(); - wq.like(TjProject::getProName,proName); + @ApiParam(value = "椤电爜鏁�(榛樿1)") @RequestParam(defaultValue = "1") Integer page, + @ApiParam(value = "鏄剧ず鏉℃暟(榛樿10)") @RequestParam(defaultValue = "10") Integer pageSize) { + Page<TjAdvice> page1 = new Page<>(page, pageSize); + Map<String, Object> map = new HashMap<>(); + List<TjAdvice> list = null; + long total = 0; + if (null != proName) { + LambdaQueryWrapper<TjProject> wq = new LambdaQueryWrapper<>(); + list = new ArrayList<>(); + wq.like(TjProject::getProName, proName); List<TjProject> projectList = tjProjectService.list(wq); - if(null !=projectList && projectList.size()>0){ + if (null != projectList && projectList.size() > 0) { for (TjProject project : projectList) { - LambdaQueryWrapper<TjAdvice>wqq=new LambdaQueryWrapper<>(); - wqq.eq(TjAdvice::getProId,project.getProId()); - IPage<TjAdvice> adviceList = tjAdviceService.page(page1,wqq); - if(null !=adviceList.getRecords() && adviceList.getRecords().size()>0){ + LambdaQueryWrapper<TjAdvice> wqq = new LambdaQueryWrapper<>(); + wqq.eq(TjAdvice::getProId, project.getProId()); + IPage<TjAdvice> adviceList = tjAdviceService.page(page1, wqq); + if (null != adviceList.getRecords() && adviceList.getRecords().size() > 0) { for (TjAdvice record : adviceList.getRecords()) { record.setProName(project.getProName()); } list.addAll(adviceList.getRecords()); } - total = adviceList.getTotal(); + total = adviceList.getTotal(); } } - map.put("list",list); - map.put("total",total); + map.put("list", list); + map.put("total", total); return AjaxResult.success(map); } Page<TjAdvice> page2 = tjAdviceService.page(page1); - list =page2.getRecords(); - if (null !=list && list.size() > 0) { + list = page2.getRecords(); + if (null != list && list.size() > 0) { for (TjAdvice advice : list) { TjProject tjProject = tjProjectService.getById(advice.getProId()); if (null != tjProject) { @@ -86,8 +195,8 @@ } } } - map.put("list",list); - map.put("total",page2.getTotal()); + map.put("list", list); + map.put("total", page2.getTotal()); return AjaxResult.success(map); } diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java index c99500a..b1fe721 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java @@ -465,6 +465,7 @@ // } // return getResult(page, pageSize, orderList, customerList, map); // } + String value = String.valueOf(compId); if (tjNumber == null) tjNumber = ""; if (compId == null) value = ""; diff --git a/ltkj-admin/src/test/java/zjhTest.java b/ltkj-admin/src/test/java/zjhTest.java index 3d86cef..032c563 100644 --- a/ltkj-admin/src/test/java/zjhTest.java +++ b/ltkj-admin/src/test/java/zjhTest.java @@ -2,6 +2,8 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.extra.qrcode.QrCodeUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.LtkjApplication; import com.ltkj.common.core.redis.RedisCache; @@ -65,19 +67,12 @@ private String secret; @Test public void test() { -// List<DictHosp> list = dictHospService.list(); -// DateTime dateTime1 = DateUtil.offsetMonth(new Date(),100); -// for (DictHosp dictHosp : list) { -// String mallMerchantSecretKey = SecurityUtils.getMallMerchantSecretKey(secret,dictHosp.getHospAreaId(),dictHosp.getHospAreaName(),dateTime1); -// dictHosp.setSecretKey(mallMerchantSecretKey); -// dictHosp.setExpirationTime(dateTime1); -// dictHospService.updateById(dictHosp); -// System.out.println(dateTime1); -// System.out.println("================================================="); -// System.out.println(mallMerchantSecretKey); -// } - } +// 鐢熸垚鎸囧畾url瀵瑰簲鐨勪簩缁寸爜鍒版枃浠讹紝瀹藉拰楂橀兘鏄�300鍍忕礌 + QrCodeUtil.generate("https://ltpeis.xaltjdkj.cn:5516/1000110001240327094056%E7%8E%89%E5%BF%A0_%E4%BD%93%E6%A3%80%E6%8A%A5%E5%91%8A.pdf", 300, 300, FileUtil.file("D:\\Users\\w\\Desktop\\qrcode.jpg")); + + + } public static void main(String[] args) { diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdvice.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdvice.java index 66e10a8..9527065 100644 --- a/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdvice.java +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdvice.java @@ -1,5 +1,6 @@ package com.ltkj.hosp.domain; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; @@ -31,8 +32,7 @@ /** * 涓婚敭 */ - @TableId - @TableField + @TableId(type=IdType.AUTO) private Long id; /** @@ -56,6 +56,25 @@ @ApiModelProperty(value = "寤鸿") private String advice; + @Excel(name = "鎵�灞炵瀹d") + @ApiModelProperty(value = "鎵�灞炵瀹d") + private String dept_id; + + @Excel(name = "蹇嵎鏍囩") + @ApiModelProperty(value = "蹇嵎鏍囩") + private String kjbq; + + @Excel(name = "寤鸿浜哄憳鎬у埆") + @ApiModelProperty(value = "寤鸿浜哄憳鎬у埆") + private String adSex; + + @Excel(name = "鏄惁鎬绘") + @ApiModelProperty(value = "鏄惁鎬绘 0甯歌 1鎬绘") + private String isZj; + + + + @TableField(exist = false) @ApiModelProperty(value = "椤圭洰鍚嶅瓧") private String proName; diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdviceKjbq.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdviceKjbq.java new file mode 100644 index 0000000..1eab9df --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjAdviceKjbq.java @@ -0,0 +1,25 @@ +package com.ltkj.hosp.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ltkj.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@ApiModel(value = "浣撴寤鸿蹇嵎鏍囩琛�") +@AllArgsConstructor +@NoArgsConstructor +public class TjAdviceKjbq extends BaseEntity { + @TableId(type = IdType.AUTO) + private Long id; + private String bqType; + private String kjbq; + private Long userId; + private String qyzt; + @TableField(exist = false) + private String userName; +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjUserAdvice.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjUserAdvice.java new file mode 100644 index 0000000..d0617da --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjUserAdvice.java @@ -0,0 +1,20 @@ +package com.ltkj.hosp.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ltkj.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@ApiModel(value = "浣撴鐢ㄦ埛甯哥敤寤鸿琛�") +@AllArgsConstructor +@NoArgsConstructor +public class TjUserAdvice extends BaseEntity { + @TableId(type = IdType.AUTO) + private Long id; + private Long userId; + private Long adviceId; +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjAdviceKjbqMapper.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjAdviceKjbqMapper.java new file mode 100644 index 0000000..e50ce0f --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjAdviceKjbqMapper.java @@ -0,0 +1,9 @@ +package com.ltkj.hosp.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ltkj.hosp.domain.TjAdviceKjbq; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TjAdviceKjbqMapper extends BaseMapper<TjAdviceKjbq> { +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjUserAdviceMapper.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjUserAdviceMapper.java new file mode 100644 index 0000000..bb0d47e --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjUserAdviceMapper.java @@ -0,0 +1,9 @@ +package com.ltkj.hosp.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ltkj.hosp.domain.TjUserAdvice; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TjUserAdviceMapper extends BaseMapper<TjUserAdvice> { +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjAdviceKjbqService.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjAdviceKjbqService.java new file mode 100644 index 0000000..0efcfdb --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjAdviceKjbqService.java @@ -0,0 +1,7 @@ +package com.ltkj.hosp.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ltkj.hosp.domain.TjAdviceKjbq; + +public interface TjAdviceKjbqService extends IService<TjAdviceKjbq> { +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjUserAdviceService.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjUserAdviceService.java new file mode 100644 index 0000000..1716bb3 --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjUserAdviceService.java @@ -0,0 +1,7 @@ +package com.ltkj.hosp.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ltkj.hosp.domain.TjUserAdvice; + +public interface TjUserAdviceService extends IService<TjUserAdvice> { +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjAdviceKjbqServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjAdviceKjbqServiceImpl.java new file mode 100644 index 0000000..cbb495a --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjAdviceKjbqServiceImpl.java @@ -0,0 +1,11 @@ +package com.ltkj.hosp.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ltkj.hosp.domain.TjAdviceKjbq; +import com.ltkj.hosp.mapper.TjAdviceKjbqMapper; +import com.ltkj.hosp.service.TjAdviceKjbqService; +import org.springframework.stereotype.Service; + +@Service +public class TjAdviceKjbqServiceImpl extends ServiceImpl<TjAdviceKjbqMapper, TjAdviceKjbq> implements TjAdviceKjbqService { +} diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjUserAdviceServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjUserAdviceServiceImpl.java new file mode 100644 index 0000000..e6c552a --- /dev/null +++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjUserAdviceServiceImpl.java @@ -0,0 +1,11 @@ +package com.ltkj.hosp.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ltkj.hosp.domain.TjUserAdvice; +import com.ltkj.hosp.mapper.TjUserAdviceMapper; +import com.ltkj.hosp.service.TjUserAdviceService; +import org.springframework.stereotype.Service; + +@Service +public class TjUserAdviceServiceImpl extends ServiceImpl<TjUserAdviceMapper,TjUserAdvice> implements TjUserAdviceService { +} -- Gitblit v1.8.0