代码调整,二维码下载
This commit is contained in:
parent
e2f4b4e2ff
commit
9c58719e1a
|
|
@ -92,6 +92,22 @@
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.zxing</groupId>
|
||||||
|
<artifactId>core</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.zxing</groupId>
|
||||||
|
<artifactId>javase</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Apache Commons Compress library for ZIP handling -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-compress</artifactId>
|
||||||
|
<version>1.22</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
|
||||||
|
|
@ -4,22 +4,16 @@ import com.bonus.common.core.domain.ResultBean;
|
||||||
import com.bonus.common.core.web.controller.BaseController;
|
import com.bonus.common.core.web.controller.BaseController;
|
||||||
import com.bonus.common.core.web.page.TableDataInfo;
|
import com.bonus.common.core.web.page.TableDataInfo;
|
||||||
import com.bonus.common.security.annotation.RequiresPermissions;
|
import com.bonus.common.security.annotation.RequiresPermissions;
|
||||||
import com.bonus.purchase.domain.BpmPurchaseInfo;
|
|
||||||
import com.bonus.purchase.dto.PurchaseBindDto;
|
import com.bonus.purchase.dto.PurchaseBindDto;
|
||||||
import com.bonus.purchase.dto.PurchaseDto;
|
import com.bonus.purchase.dto.PurchaseDto;
|
||||||
import com.bonus.purchase.dto.PurchaseTaskDto;
|
|
||||||
import com.bonus.purchase.service.BpmPurchaseBindService;
|
import com.bonus.purchase.service.BpmPurchaseBindService;
|
||||||
import com.bonus.purchase.service.impl.BpmPurchaseInfoService;
|
|
||||||
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
||||||
import com.bonus.purchase.vo.PurchaseVo;
|
import com.bonus.purchase.vo.PurchaseVo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
import javax.validation.constraints.Positive;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新购到货验收表(bpm_purchase_info)控制层
|
* 新购到货验收表(bpm_purchase_info)控制层
|
||||||
|
|
@ -73,4 +67,13 @@ public class BpmPurchaseBindController extends BaseController {
|
||||||
return ResultBean.toIsSuccess(1,"急急急");
|
return ResultBean.toIsSuccess(1,"急急急");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二维码生成下载
|
||||||
|
*/
|
||||||
|
@PostMapping(value = "/downloadQrCode")
|
||||||
|
@RequiresPermissions("purchase:bpmPurchaseInfo:query")
|
||||||
|
public void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto) {
|
||||||
|
bpmPurchaseBindService.downloadQrCode(response, purchaseDto);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.Positive;
|
import javax.validation.constraints.Positive;
|
||||||
|
|
@ -27,7 +28,8 @@ import java.util.List;
|
||||||
@RequestMapping("/purchase/store")
|
@RequestMapping("/purchase/store")
|
||||||
public class BpmPurchaseStorageController extends BaseController {
|
public class BpmPurchaseStorageController extends BaseController {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
|
@Resource
|
||||||
private BpmPurchaseStorageService purchaseStorageService;
|
private BpmPurchaseStorageService purchaseStorageService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.bonus.purchase.dto;
|
package com.bonus.purchase.dto;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
@ -12,6 +13,7 @@ import java.util.List;
|
||||||
* @create 2024/8/19 17:50
|
* @create 2024/8/19 17:50
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class PurchaseDto {
|
public class PurchaseDto {
|
||||||
|
|
||||||
@ApiModelProperty(value = "id")
|
@ApiModelProperty(value = "id")
|
||||||
|
|
@ -47,4 +49,13 @@ public class PurchaseDto {
|
||||||
|
|
||||||
@ApiModelProperty(value = "二级明细id")
|
@ApiModelProperty(value = "二级明细id")
|
||||||
private String purchaseId;
|
private String purchaseId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "采购数量")
|
||||||
|
private Integer num;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "二维码code")
|
||||||
|
private String qrCode;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "二维码curl")
|
||||||
|
private String qrUrl;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,10 @@
|
||||||
package com.bonus.purchase.mapper;
|
package com.bonus.purchase.mapper;
|
||||||
|
|
||||||
import com.bonus.base.api.domain.MaType;
|
import com.bonus.purchase.dto.PurchaseBindDto;
|
||||||
import com.bonus.purchase.domain.BpmPurchaseInfo;
|
|
||||||
import com.bonus.purchase.dto.PurchaseDto;
|
import com.bonus.purchase.dto.PurchaseDto;
|
||||||
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
||||||
import com.bonus.purchase.vo.PurchaseVo;
|
import com.bonus.purchase.vo.PurchaseVo;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -24,4 +22,30 @@ public interface BpmPurchaseBindMapper {
|
||||||
List<PurchaseVo> selectManageList(PurchaseDto purchaseDto);
|
List<PurchaseVo> selectManageList(PurchaseDto purchaseDto);
|
||||||
|
|
||||||
List<PurchaseAcceptVo> getDetailsList(PurchaseDto record);
|
List<PurchaseAcceptVo> getDetailsList(PurchaseDto record);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据月份查找code
|
||||||
|
* @param genMonth
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PurchaseBindDto> select(String genMonth);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插入数据
|
||||||
|
* @param dto
|
||||||
|
*/
|
||||||
|
void insert(PurchaseDto dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新状态
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void updateStatus(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询状态
|
||||||
|
* @param purchaseDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Integer> selectStatus(PurchaseDto purchaseDto);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
package com.bonus.purchase.service;
|
package com.bonus.purchase.service;
|
||||||
|
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
|
||||||
import com.bonus.purchase.domain.BpmPurchaseInfo;
|
|
||||||
import com.bonus.purchase.dto.PurchaseBindDto;
|
import com.bonus.purchase.dto.PurchaseBindDto;
|
||||||
import com.bonus.purchase.dto.PurchaseDto;
|
import com.bonus.purchase.dto.PurchaseDto;
|
||||||
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
||||||
import com.bonus.purchase.vo.PurchaseVo;
|
import com.bonus.purchase.vo.PurchaseVo;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -20,4 +19,12 @@ public interface BpmPurchaseBindService {
|
||||||
List<PurchaseAcceptVo> getDetailsList(PurchaseDto record);
|
List<PurchaseAcceptVo> getDetailsList(PurchaseDto record);
|
||||||
|
|
||||||
int addBind(PurchaseBindDto bindDto);
|
int addBind(PurchaseBindDto bindDto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载二维码
|
||||||
|
* @param purchaseDto
|
||||||
|
* @param response
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -104,16 +104,7 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService {
|
||||||
PurchaseAcceptVo::getId,
|
PurchaseAcceptVo::getId,
|
||||||
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
||||||
));
|
));
|
||||||
for (Map.Entry<Integer, List<Integer>> entry : groupedByIdStatus.entrySet()) {
|
result = getResult(result, groupedByIdStatus);
|
||||||
Integer id = entry.getKey();
|
|
||||||
List<Integer> statusList1 = entry.getValue();
|
|
||||||
if (statusList1.contains(Constants.PENDING_BINDING)) {
|
|
||||||
//如果详情状态包含待绑定,则外部任务状态为待绑定
|
|
||||||
result += bpmTaskMapper.updateStatusById(Constants.PENDING_BINDING, id);
|
|
||||||
} else if (!statusList1.contains(Constants.PENDING_BINDING) && statusList1.contains(Constants.PENDING_INVENTORY)) {
|
|
||||||
result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (result > 0) {
|
if (result > 0) {
|
||||||
return AjaxResult.success("批量验收合格成功");
|
return AjaxResult.success("批量验收合格成功");
|
||||||
}
|
}
|
||||||
|
|
@ -147,6 +138,24 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService {
|
||||||
PurchaseAcceptVo::getId,
|
PurchaseAcceptVo::getId,
|
||||||
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
||||||
));
|
));
|
||||||
|
result = getResult(result, groupedByIdStatus);
|
||||||
|
if (result > 0) {
|
||||||
|
return AjaxResult.success("批量验收合格成功");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return AjaxResult.error("操作失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量合格方法抽取
|
||||||
|
* @param result
|
||||||
|
* @param groupedByIdStatus
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int getResult(int result, Map<Integer, List<Integer>> groupedByIdStatus) {
|
||||||
for (Map.Entry<Integer, List<Integer>> entry : groupedByIdStatus.entrySet()) {
|
for (Map.Entry<Integer, List<Integer>> entry : groupedByIdStatus.entrySet()) {
|
||||||
Integer id = entry.getKey();
|
Integer id = entry.getKey();
|
||||||
List<Integer> statusList1 = entry.getValue();
|
List<Integer> statusList1 = entry.getValue();
|
||||||
|
|
@ -157,14 +166,7 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService {
|
||||||
result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id);
|
result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result > 0) {
|
return result;
|
||||||
return AjaxResult.success("批量验收合格成功");
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return AjaxResult.error("操作失败");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -190,6 +192,24 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService {
|
||||||
PurchaseAcceptVo::getId,
|
PurchaseAcceptVo::getId,
|
||||||
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList())
|
||||||
));
|
));
|
||||||
|
result = getAnInt(result, groupedByIdStatus);
|
||||||
|
if (result > 0) {
|
||||||
|
return AjaxResult.success("操作成功");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return AjaxResult.error("操作失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量不合格方法抽取
|
||||||
|
* @param result
|
||||||
|
* @param groupedByIdStatus
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int getAnInt(int result, Map<Integer, List<Integer>> groupedByIdStatus) {
|
||||||
for (Map.Entry<Integer, List<Integer>> entry : groupedByIdStatus.entrySet()) {
|
for (Map.Entry<Integer, List<Integer>> entry : groupedByIdStatus.entrySet()) {
|
||||||
Integer id = entry.getKey();
|
Integer id = entry.getKey();
|
||||||
List<Integer> statusList1 = entry.getValue();
|
List<Integer> statusList1 = entry.getValue();
|
||||||
|
|
@ -201,13 +221,6 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService {
|
||||||
result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_NO_PASSED, id);
|
result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_NO_PASSED, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result > 0) {
|
return result;
|
||||||
return AjaxResult.success("操作成功");
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return AjaxResult.error("操作失败");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,32 @@
|
||||||
package com.bonus.purchase.service.impl;
|
package com.bonus.purchase.service.impl;
|
||||||
|
|
||||||
import com.alibaba.nacos.common.utils.CollectionUtils;
|
import com.alibaba.nacos.common.utils.CollectionUtils;
|
||||||
import com.bonus.common.core.web.domain.AjaxResult;
|
import com.bonus.common.core.utils.DateTimeHelper;
|
||||||
import com.bonus.purchase.domain.BpmPurchaseInfo;
|
|
||||||
import com.bonus.purchase.dto.PurchaseBindDto;
|
import com.bonus.purchase.dto.PurchaseBindDto;
|
||||||
import com.bonus.purchase.dto.PurchaseDto;
|
import com.bonus.purchase.dto.PurchaseDto;
|
||||||
import com.bonus.purchase.mapper.BpmPurchaseAcceptMapper;
|
import com.bonus.purchase.mapper.BpmPurchaseAcceptMapper;
|
||||||
import com.bonus.purchase.mapper.BpmPurchaseBindMapper;
|
import com.bonus.purchase.mapper.BpmPurchaseBindMapper;
|
||||||
import com.bonus.purchase.service.BpmPurchaseAcceptService;
|
|
||||||
import com.bonus.purchase.service.BpmPurchaseBindService;
|
import com.bonus.purchase.service.BpmPurchaseBindService;
|
||||||
import com.bonus.purchase.utils.Constants;
|
import com.bonus.purchase.utils.QrCodeUtils;
|
||||||
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
import com.bonus.purchase.vo.PurchaseAcceptVo;
|
||||||
import com.bonus.purchase.vo.PurchaseVo;
|
import com.bonus.purchase.vo.PurchaseVo;
|
||||||
|
import com.google.zxing.WriterException;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.stream.Collectors;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author bonus
|
* @Author bonus
|
||||||
|
|
@ -31,6 +38,9 @@ public class BpmPurchaseBindServiceImpl implements BpmPurchaseBindService {
|
||||||
@Resource
|
@Resource
|
||||||
private BpmPurchaseBindMapper mapper;
|
private BpmPurchaseBindMapper mapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private BpmPurchaseAcceptMapper acceptMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<PurchaseVo> selectManageList(PurchaseDto purchaseDto) {
|
public List<PurchaseVo> selectManageList(PurchaseDto purchaseDto) {
|
||||||
|
|
@ -58,4 +68,144 @@ public class BpmPurchaseBindServiceImpl implements BpmPurchaseBindService {
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二维码下载
|
||||||
|
* @param purchaseDto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto) {
|
||||||
|
//生成二维码
|
||||||
|
if (purchaseDto.getId() != null) {
|
||||||
|
isDownLoad(purchaseDto);
|
||||||
|
String genMonth = DateTimeHelper.getNowMonth();
|
||||||
|
//根据月份查找code
|
||||||
|
List<PurchaseBindDto> codeList = mapper.select(genMonth);
|
||||||
|
int num = 0;
|
||||||
|
if (CollectionUtils.isNotEmpty(codeList)) {
|
||||||
|
PurchaseBindDto purchaseBindDto = codeList.get(0);
|
||||||
|
num = Integer.parseInt(purchaseBindDto.getMaCode().split("-")[1]);
|
||||||
|
}
|
||||||
|
List<PurchaseAcceptVo> details = acceptMapper.getDetails(purchaseDto);
|
||||||
|
try {
|
||||||
|
Path downloadDir = Paths.get("qr_codes");
|
||||||
|
Files.createDirectories(downloadDir);
|
||||||
|
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
|
||||||
|
if (CollectionUtils.isNotEmpty(details)) {
|
||||||
|
for (int i = 0; i < details.size(); i++) {
|
||||||
|
String materialModel = details.get(i).getMaterialModel();
|
||||||
|
String materialName = details.get(i).getMaterialName();
|
||||||
|
Integer typeId = details.get(i).getTypeId();
|
||||||
|
Integer checkNum = details.get(i).getCheckNum();
|
||||||
|
getString(purchaseDto, genMonth, num, downloadDir, zos, materialModel, materialName, typeId, checkNum);
|
||||||
|
num = num + checkNum;
|
||||||
|
}
|
||||||
|
zos.flush();
|
||||||
|
zos.close();
|
||||||
|
}
|
||||||
|
} catch (WriterException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}else if (purchaseDto.getPurchaseId() != null) {
|
||||||
|
isDownLoad(purchaseDto);
|
||||||
|
String genMonth = DateTimeHelper.getNowMonth();
|
||||||
|
//根据月份查找code
|
||||||
|
List<PurchaseBindDto> codeList = mapper.select(genMonth);
|
||||||
|
int num = 0;
|
||||||
|
if (CollectionUtils.isNotEmpty(codeList)) {
|
||||||
|
PurchaseBindDto purchaseBindDto = codeList.get(0);
|
||||||
|
num = Integer.parseInt(purchaseBindDto.getMaCode().split("-")[1]);
|
||||||
|
}
|
||||||
|
List<PurchaseAcceptVo> details = acceptMapper.getDetails(purchaseDto);
|
||||||
|
try {
|
||||||
|
Path downloadDir = Paths.get("qr_codes");
|
||||||
|
Files.createDirectories(downloadDir);
|
||||||
|
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
|
||||||
|
if(CollectionUtils.isNotEmpty(details)) {
|
||||||
|
String materialModel = details.get(0).getMaterialModel();
|
||||||
|
String materialName = details.get(0).getMaterialName();
|
||||||
|
Integer typeId = details.get(0).getTypeId();
|
||||||
|
Integer checkNum = details.get(0).getCheckNum();
|
||||||
|
purchaseDto.setId(details.get(0).getTaskId());
|
||||||
|
getString(purchaseDto, genMonth, num, downloadDir, zos, materialModel, materialName, typeId, checkNum);
|
||||||
|
zos.flush();
|
||||||
|
zos.close();
|
||||||
|
}
|
||||||
|
} catch (WriterException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法抽取
|
||||||
|
* @param purchaseDto
|
||||||
|
* @param genMonth
|
||||||
|
* @param num
|
||||||
|
* @param downloadDir
|
||||||
|
* @param zos
|
||||||
|
* @param materialModel
|
||||||
|
* @param materialName
|
||||||
|
* @param typeId
|
||||||
|
* @param checkNum
|
||||||
|
* @throws WriterException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private void getString(PurchaseDto purchaseDto, String genMonth, int num, Path downloadDir, ZipOutputStream zos, String materialModel, String materialName, Integer typeId, Integer checkNum) throws WriterException, IOException {
|
||||||
|
for (int j = 1; j <= checkNum / 1000; j++) {
|
||||||
|
genMonth = genMonth.replace("-", "");
|
||||||
|
String code = genMonth + "-" + String.format("%5d", num + j).replace(" ", "0");
|
||||||
|
// 新购管理-二维码打印-新增
|
||||||
|
String qrUrl = "D://files/" + "images" + "/" + code + ".jpg";
|
||||||
|
String Path = "[" + materialModel + "-" + materialName + "]" + code + ".jpg";
|
||||||
|
String baseText = "QR Code " + j;
|
||||||
|
BufferedImage qrCodeImage = QrCodeUtils.generateQRCodeImage(baseText, 300, 300);
|
||||||
|
java.nio.file.Path filePath = downloadDir.resolve(Path);
|
||||||
|
QrCodeUtils.saveQRCodeImage(qrCodeImage, filePath);
|
||||||
|
PurchaseDto dto = PurchaseDto.builder().id(purchaseDto.getId()).typeId(typeId).qrCode(code).qrUrl(qrUrl).build();
|
||||||
|
mapper.insert(dto);
|
||||||
|
//修改任务表的是否下载状态
|
||||||
|
mapper.updateStatus(purchaseDto.getId());
|
||||||
|
extracted(zos, materialModel, materialName, code, qrUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否下载方法抽取
|
||||||
|
* @param purchaseDto
|
||||||
|
*/
|
||||||
|
private void isDownLoad(PurchaseDto purchaseDto) {
|
||||||
|
List<Integer> statusList =mapper.selectStatus(purchaseDto);
|
||||||
|
if (CollectionUtils.isNotEmpty(statusList) && statusList.contains(1)) {
|
||||||
|
throw new RuntimeException("该采购单二维码已生成,无法再次生成!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二维码下载方法抽取
|
||||||
|
* @param zos
|
||||||
|
* @param materialModel
|
||||||
|
* @param materialName
|
||||||
|
* @param code
|
||||||
|
* @param qrUrl
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private void extracted(ZipOutputStream zos, String materialModel, String materialName, String code, String qrUrl) throws IOException {
|
||||||
|
// 判断路径是否存在
|
||||||
|
File imageFile = new File(qrUrl);
|
||||||
|
if (!imageFile.exists()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
zos.setLevel(0);
|
||||||
|
zos.putNextEntry(new ZipEntry("[" + materialModel + "-" + materialName + "]" + code + ".jpg"));
|
||||||
|
InputStream fis = new FileInputStream(imageFile);
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int r = 0;
|
||||||
|
while ((r = fis.read(buffer)) != -1) {
|
||||||
|
zos.write(buffer, 0, r);
|
||||||
|
}
|
||||||
|
fis.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
package com.bonus.purchase.utils;
|
||||||
|
|
||||||
|
import com.google.zxing.BarcodeFormat;
|
||||||
|
import com.google.zxing.WriterException;
|
||||||
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
||||||
|
import com.google.zxing.common.BitMatrix;
|
||||||
|
import com.google.zxing.qrcode.QRCodeWriter;
|
||||||
|
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
||||||
|
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二维码生成,保存,压缩包工具类
|
||||||
|
* @Author ma_sh
|
||||||
|
* @create 2024/8/23 11:37
|
||||||
|
*/
|
||||||
|
public class QrCodeUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成二维码图片
|
||||||
|
* @param text 二维码内容
|
||||||
|
* @param width 图片宽度
|
||||||
|
* @param height 图片高度
|
||||||
|
* @return 生成的二维码图片
|
||||||
|
* @throws WriterException 如果二维码生成失败
|
||||||
|
*/
|
||||||
|
public static BufferedImage generateQRCodeImage(String text, int width, int height) throws WriterException {
|
||||||
|
QRCodeWriter qrCodeWriter = new QRCodeWriter();
|
||||||
|
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
|
||||||
|
return MatrixToImageWriter.toBufferedImage(bitMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将二维码图片保存到文件
|
||||||
|
* @param qrCodeImage 二维码图片
|
||||||
|
* @param filePath 文件路径
|
||||||
|
* @throws IOException 如果保存文件失败
|
||||||
|
*/
|
||||||
|
public static void saveQRCodeImage(BufferedImage qrCodeImage, Path filePath) throws IOException {
|
||||||
|
File outputFile = filePath.toFile();
|
||||||
|
ImageIO.write(qrCodeImage, "jpg", outputFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩目录中的图片到ZIP文件
|
||||||
|
* @param sourceDir 源目录
|
||||||
|
* @param zipFilePath ZIP文件路径
|
||||||
|
* @throws IOException 如果压缩过程失败
|
||||||
|
*/
|
||||||
|
public static void zipImages(Path sourceDir, Path zipFilePath) throws IOException {
|
||||||
|
try (FileOutputStream fos = new FileOutputStream(zipFilePath.toFile());
|
||||||
|
ZipArchiveOutputStream zos = new ZipArchiveOutputStream(fos)) {
|
||||||
|
|
||||||
|
Files.walk(sourceDir)
|
||||||
|
.filter(Files::isRegularFile)
|
||||||
|
.forEach(file -> {
|
||||||
|
try {
|
||||||
|
ZipArchiveEntry zipEntry = new ZipArchiveEntry(file.toFile(), sourceDir.relativize(file).toString());
|
||||||
|
zos.putArchiveEntry(zipEntry);
|
||||||
|
Files.copy(file, zos);
|
||||||
|
zos.closeArchiveEntry();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
Path downloadDir = Paths.get("qr_codes");
|
||||||
|
Files.createDirectories(downloadDir);
|
||||||
|
|
||||||
|
int width = 300;
|
||||||
|
int height = 300;
|
||||||
|
String baseText = "QR Code ";
|
||||||
|
|
||||||
|
// 生成二维码
|
||||||
|
for (int i = 1; i <= 2; i++) {
|
||||||
|
String text = baseText + i;
|
||||||
|
BufferedImage qrCodeImage = QRCodeUtils.generateQRCodeImage(text, width, height);
|
||||||
|
Path filePath = downloadDir.resolve("QRCode_" + i + ".jpg");
|
||||||
|
QRCodeUtils.saveQRCodeImage(qrCodeImage, filePath);
|
||||||
|
System.out.println("Generated: " + filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 压缩二维码图片
|
||||||
|
Path zipFilePath = Paths.get("qr_codes.zip");
|
||||||
|
zipImages(downloadDir, zipFilePath);
|
||||||
|
System.out.println("Images zipped to: " + zipFilePath);
|
||||||
|
|
||||||
|
// 清理
|
||||||
|
Files.walk(downloadDir)
|
||||||
|
.map(Path::toFile)
|
||||||
|
.forEach(File::delete);
|
||||||
|
Files.deleteIfExists(downloadDir);
|
||||||
|
|
||||||
|
} catch (WriterException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@ public class PurchaseAcceptVo {
|
||||||
private String materialName;
|
private String materialName;
|
||||||
|
|
||||||
@ApiModelProperty("规格型号")
|
@ApiModelProperty("规格型号")
|
||||||
private String specificationCode;
|
private String materialModel;
|
||||||
|
|
||||||
@ApiModelProperty(value="单位")
|
@ApiModelProperty(value="单位")
|
||||||
private String unitName;
|
private String unitName;
|
||||||
|
|
@ -92,4 +92,13 @@ public class PurchaseAcceptVo {
|
||||||
@ApiModelProperty(value="备注")
|
@ApiModelProperty(value="备注")
|
||||||
@Excel(name = "备注")
|
@Excel(name = "备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "二级明细id")
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "管理类型0是编码1计数")
|
||||||
|
private String manageType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "任务id")
|
||||||
|
private String taskId;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,4 +81,7 @@ public class PurchaseVo {
|
||||||
@ApiModelProperty(value="备注")
|
@ApiModelProperty(value="备注")
|
||||||
@Excel(name = "备注")
|
@Excel(name = "备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "管理类型0是编码1计数")
|
||||||
|
private String manageType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
AND (
|
AND (
|
||||||
bt.`code` LIKE CONCAT('%',#{keyWord},'%')
|
bt.`code` LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR GROUP_CONCAT( mt.`name` ) LIKE CONCAT('%',#{keyWord},'%')
|
OR GROUP_CONCAT( mt.`name` ) LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR bp.tax_rate = #{keyWord}
|
|
||||||
OR su.nick_name LIKE CONCAT('%',#{keyWord},'%')
|
OR su.nick_name LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR bt.remark LIKE CONCAT('%',#{keyWord},'%')
|
OR bt.remark LIKE CONCAT('%',#{keyWord},'%')
|
||||||
)
|
)
|
||||||
|
|
@ -57,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<select id="getDetails" resultType="com.bonus.purchase.vo.PurchaseAcceptVo">
|
<select id="getDetails" resultType="com.bonus.purchase.vo.PurchaseAcceptVo">
|
||||||
SELECT
|
SELECT
|
||||||
bp.id AS purchaseId,
|
bp.id AS purchaseId,
|
||||||
|
bp.task_id AS taskId,
|
||||||
mt1.`name` AS materialName,
|
mt1.`name` AS materialName,
|
||||||
mt.`name` AS materialModel,
|
mt.`name` AS materialModel,
|
||||||
mt.manage_type AS manageType,
|
mt.manage_type AS manageType,
|
||||||
|
|
@ -64,8 +64,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
bp.purchase_price AS purchasePrice,
|
bp.purchase_price AS purchasePrice,
|
||||||
bp.notax_price AS notaxPrice,
|
bp.notax_price AS notaxPrice,
|
||||||
bp.purchase_num AS purchaseNum,
|
bp.purchase_num AS purchaseNum,
|
||||||
|
bp.check_num AS checkNum,
|
||||||
|
bp.type_id as typeId,
|
||||||
bs.`name` AS supplierName,
|
bs.`name` AS supplierName,
|
||||||
CONCAT(bp.tax_rate, '%') AS taxRate,
|
|
||||||
bp.product_date AS productDate,
|
bp.product_date AS productDate,
|
||||||
bp.`status` AS STATUS,
|
bp.`status` AS STATUS,
|
||||||
sda1.dict_label AS statusName
|
sda1.dict_label AS statusName
|
||||||
|
|
|
||||||
|
|
@ -51,8 +51,46 @@
|
||||||
supplier_id, product_date, `status`, bind_num, input_num, updater, update_time, auditor,
|
supplier_id, product_date, `status`, bind_num, input_num, updater, update_time, auditor,
|
||||||
audit_time, is_active, remark, file_url
|
audit_time, is_active, remark, file_url
|
||||||
</sql>
|
</sql>
|
||||||
|
<insert id="insert">
|
||||||
|
INSERT INTO bm_qrcode
|
||||||
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="qrCode != null">
|
||||||
|
code,
|
||||||
|
</if>
|
||||||
|
<if test="typeId != null">
|
||||||
|
type_id,
|
||||||
|
</if>
|
||||||
|
<if test="qrUrl != null">
|
||||||
|
qr_url,
|
||||||
|
</if>
|
||||||
|
<if test="id != null">
|
||||||
|
task_id,
|
||||||
|
</if>
|
||||||
|
gen_time,
|
||||||
|
is_active
|
||||||
|
</trim>
|
||||||
|
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
|
||||||
|
<if test="qrCode != null">
|
||||||
|
#{qrCode},
|
||||||
|
</if>
|
||||||
|
<if test="typeId != null">
|
||||||
|
#{typeId},
|
||||||
|
</if>
|
||||||
|
<if test="qrUrl != null">
|
||||||
|
#{qrUrl},
|
||||||
|
</if>
|
||||||
|
<if test="id != null">
|
||||||
|
#{id},
|
||||||
|
</if>
|
||||||
|
NOW(),
|
||||||
|
1
|
||||||
|
</trim>
|
||||||
|
</insert>
|
||||||
|
<update id="updateStatus">
|
||||||
|
UPDATE bpm_purchase_info
|
||||||
|
SET is_download = '1'
|
||||||
|
WHERE task_id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
|
||||||
<select id="selectManageList" resultType="com.bonus.purchase.vo.PurchaseVo">
|
<select id="selectManageList" resultType="com.bonus.purchase.vo.PurchaseVo">
|
||||||
|
|
@ -125,4 +163,28 @@
|
||||||
AND bp.task_id = #{taskId,jdbcType=INTEGER}
|
AND bp.task_id = #{taskId,jdbcType=INTEGER}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
<select id="select" resultType="com.bonus.purchase.dto.PurchaseBindDto">
|
||||||
|
SELECT
|
||||||
|
`code` as maCode
|
||||||
|
FROM
|
||||||
|
bm_qrcode
|
||||||
|
WHERE
|
||||||
|
DATE_FORMAT(gen_time, '%Y-%m') = #{genMonth}
|
||||||
|
ORDER BY
|
||||||
|
`code` DESC
|
||||||
|
</select>
|
||||||
|
<select id="selectStatus" resultType="java.lang.Integer">
|
||||||
|
SELECT
|
||||||
|
is_download
|
||||||
|
FROM
|
||||||
|
bpm_purchase_info
|
||||||
|
WHERE
|
||||||
|
is_active = '1'
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and task_id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="purchaseId != null and purchaseId != ''">
|
||||||
|
and id = #{purchaseId}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
SUM( bp.purchase_num ) AS purchaseNum,
|
SUM( bp.purchase_num ) AS purchaseNum,
|
||||||
SUM( bp.purchase_price ) AS purchasePrice,
|
SUM( bp.purchase_price ) AS purchasePrice,
|
||||||
SUM( bp.notax_price ) AS notaxPrice,
|
SUM( bp.notax_price ) AS notaxPrice,
|
||||||
bt.creator AS createBy,
|
su.nick_name AS createBy,
|
||||||
bt.create_time AS createTime,
|
bt.create_time AS createTime,
|
||||||
bt.`status` AS STATUS,
|
bt.`status` AS STATUS,
|
||||||
sda.dict_label AS statusName,
|
sda.dict_label AS statusName,
|
||||||
|
|
@ -48,17 +48,17 @@
|
||||||
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
|
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
|
||||||
LEFT JOIN ma_type mt ON bp.type_id = mt.id
|
LEFT JOIN ma_type mt ON bp.type_id = mt.id
|
||||||
LEFT JOIN sys_dict_data sda ON sda.dict_code = bt.`status`
|
LEFT JOIN sys_dict_data sda ON sda.dict_code = bt.`status`
|
||||||
|
LEFT JOIN sys_user su ON bt.creator = su.user_id
|
||||||
WHERE
|
WHERE
|
||||||
bp.is_active = '1'
|
bp.is_active = '1'
|
||||||
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
|
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
|
||||||
AND bt.arrival_time BETWEEN #{startTime} AND #{endTime}
|
<![CDATA[ AND DATE_FORMAT( bt.arrival_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime} ]]>
|
||||||
</if>
|
</if>
|
||||||
<if test="keyWord != null and keyWord != ''">
|
<if test="keyWord != null and keyWord != ''">
|
||||||
AND (
|
AND (
|
||||||
bt.`code` LIKE CONCAT('%',#{keyWord},'%')
|
bt.`code` LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR mt1.`name` LIKE CONCAT('%',#{keyWord},'%')
|
OR mt1.`name` LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR bp.tax_rate = #{keyWord}
|
OR su.nick_name LIKE CONCAT('%',#{keyWord},'%')
|
||||||
OR bt.creator LIKE CONCAT('%',#{keyWord},'%')
|
|
||||||
OR bt.remark LIKE CONCAT('%',#{keyWord},'%')
|
OR bt.remark LIKE CONCAT('%',#{keyWord},'%')
|
||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -79,11 +79,12 @@
|
||||||
sda.dict_label AS unitName,
|
sda.dict_label AS unitName,
|
||||||
bp.purchase_price AS purchasePrice,
|
bp.purchase_price AS purchasePrice,
|
||||||
bp.notax_price AS notaxPrice,
|
bp.notax_price AS notaxPrice,
|
||||||
bp.purchase_num AS purchaseNum,
|
bp.bind_num AS purchaseNum,
|
||||||
bs.`name` AS supplierName,
|
bs.`name` AS supplierName,
|
||||||
bp.product_date AS productDate,
|
bp.product_date AS productDate,
|
||||||
bp.`status` AS STATUS,
|
bp.`status` AS STATUS,
|
||||||
sda1.dict_label AS statusName
|
sda1.dict_label AS statusName,
|
||||||
|
mt.manage_type AS manageType
|
||||||
FROM
|
FROM
|
||||||
bpm_purchase_info bp
|
bpm_purchase_info bp
|
||||||
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
|
LEFT JOIN bpm_task bt ON bp.task_id = bt.id
|
||||||
|
|
@ -93,18 +94,18 @@
|
||||||
LEFT JOIN bm_supplier bs ON bp.supplier_id = bs.id
|
LEFT JOIN bm_supplier bs ON bp.supplier_id = bs.id
|
||||||
LEFT JOIN sys_dict_data sda1 ON sda1.dict_code = bp.`status`
|
LEFT JOIN sys_dict_data sda1 ON sda1.dict_code = bp.`status`
|
||||||
WHERE
|
WHERE
|
||||||
bp.is_acvtive = '1'
|
bp.is_active = '1'
|
||||||
<if test="typeId != null and typeId != ''">
|
<if test="typeId != null and typeId != ''">
|
||||||
AND (
|
AND mt.id = #{typeId}
|
||||||
mt1.id = #{typeId}
|
|
||||||
OR mt.id = #{typeId}
|
|
||||||
)
|
|
||||||
</if>
|
</if>
|
||||||
<if test="supplierId != null and supplierId != ''">
|
<if test="supplierId != null and supplierId != ''">
|
||||||
AND bs.id = #{supplierId}
|
AND bs.id = #{supplierId}
|
||||||
</if>
|
</if>
|
||||||
<if test="productDate != null and productDate != ''">
|
<if test="productDate != null and productDate != ''">
|
||||||
AND bp.product_date = #{productDate}
|
<![CDATA[ AND DATE_FORMAT( bp.product_date, '%Y-%m-%d' ) = #{productDate} ]]>
|
||||||
|
</if>
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
AND bp.task_id = #{id}
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
<select id="selectByPrimaryKey" resultType="com.bonus.purchase.domain.PurchaseStorageDto"
|
<select id="selectByPrimaryKey" resultType="com.bonus.purchase.domain.PurchaseStorageDto"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue