diff --git a/archives/src/main/java/com/storeroom/modules/archives/controller/ArrangeController.java b/archives/src/main/java/com/storeroom/modules/archives/controller/ArrangeController.java new file mode 100644 index 0000000..c780f53 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/controller/ArrangeController.java @@ -0,0 +1,31 @@ +package com.storeroom.modules.archives.controller; + +import com.storeroom.modules.archives.service.ArrangeService; +import com.storeroom.modules.archives.service.dto.ArrangeAddDTO; +import com.storeroom.utils.ApiResponse; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "档案盘点") +@RequestMapping("/api/arrange") +public class ArrangeController { + + private final ArrangeService arrangeService; + + @ApiOperation("新增盘点") + @PostMapping("/addArrange") + public ApiResponse addArrange( + @Validated @RequestBody ArrangeAddDTO dto + ){ + return ApiResponse.success(arrangeService.addArrange(dto)); + } + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/controller/CaseController.java b/archives/src/main/java/com/storeroom/modules/archives/controller/CaseController.java index 698bada..0f48167 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/controller/CaseController.java +++ b/archives/src/main/java/com/storeroom/modules/archives/controller/CaseController.java @@ -1,6 +1,10 @@ package com.storeroom.modules.archives.controller; +import cn.hutool.json.JSONObject; import com.storeroom.annotaion.rest.AnonymousGetMapping; +import com.storeroom.modules.archives.domain.ArchivesCase; +import com.storeroom.modules.archives.domain.ArchivesCaseLog; +import com.storeroom.modules.common.ExcelUtil; import com.storeroom.utils.enums.ResponseStatus; import com.storeroom.modules.archives.service.ArchivesCaseService; import com.storeroom.modules.archives.service.dto.ArchivesCaseCartoningDTO; @@ -9,10 +13,17 @@ import com.storeroom.utils.ApiResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.data.domain.Pageable; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; import java.util.List; @RestController @@ -21,14 +32,15 @@ import java.util.List; @RequestMapping("/api/case") public class CaseController { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); private final ArchivesCaseService caseService; @ApiOperation("档案盒列表") @GetMapping("/initCaseList") public ApiResponse initCaseList( - String tid, String caseName,String barcode, Pageable page + Integer storageType,String tid, String caseName,String barcode, Pageable page ){ - return ApiResponse.success(caseService.initCaseList(tid,caseName,barcode,page)); + return ApiResponse.success(caseService.initCaseList(storageType,tid,caseName,barcode,page)); } @ApiOperation("获取全部档案盒") @@ -132,4 +144,70 @@ public class CaseController { return ApiResponse.success(caseService.findInCase(caseId)); } + @ApiOperation("删除盒") + @PostMapping("/del") + public ApiResponse del( + @Validated @RequestBody List caseId + ){ + List doDel = new ArrayList<>(); + List noDel = new ArrayList<>(); + //盒已入库/已装盒 不可删 + for(String id : caseId){ + ArchivesCase archivesCase = caseService.findById(id); + if(null != archivesCase && StringUtils.isEmpty(archivesCase.getFolderLocation()) && archivesCase.getDepositNum() == 0){ + doDel.add(archivesCase); + }else{ + noDel.add(archivesCase); + } + } + if(doDel.size()!=0){ + caseService.batchDelCase(doDel); + } + JSONObject json = new JSONObject(); + json.put("doDel",doDel); + json.put("noDel",noDel); + return ApiResponse.success(json); + } + + @ApiOperation("档案盒记录") + @GetMapping("/initCaseLog") + public ApiResponse initCaseLog( + Integer operationType,String caseName,String tid,String barcode,Pageable page + ){ + return ApiResponse.success(caseService.initCaseLog(operationType,caseName,tid,barcode,page)); + } + + @ApiOperation("导出盒日志记录") + @AnonymousGetMapping("/exportCaseLogList") + @ResponseBody + public void exportCaseLogList( + HttpServletResponse response, + @RequestParam("logIds") List logIds + ){ + List logs = caseService.initCaseLogList(logIds); + String[] Etitle = {"序号","类型","盒名称","TID","条形码","操作人","操作时间"}; + String [][] content = new String[logs.size()][]; + for(int i = 0;i< logs.size();i++) { + content[i] = new String[Etitle.length]; + ArchivesCaseLog log = logs.get(i); + content[i][0] = i+1+""; + content[i][1] = log.getOperationType() == 1 ? "装盒":"拆盒"; + content[i][2] = log.getCaseName(); + content[i][3] = log.getTid(); + content[i][4] = log.getBarcode(); + content[i][5] = log.getCreateBy(); + content[i][6] = format.format(new Date(log.getCreateTime().getTime())); + } + HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("sheet",Etitle,content,null); + try { + ExcelUtil.setResponseHeader(response, "档案盒记录"+format.format(new Date())+".xls"); + OutputStream os = response.getOutputStream(); + wb.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } diff --git a/archives/src/main/java/com/storeroom/modules/archives/controller/RFIDController.java b/archives/src/main/java/com/storeroom/modules/archives/controller/RFIDController.java index fcc4485..4d6a357 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/controller/RFIDController.java +++ b/archives/src/main/java/com/storeroom/modules/archives/controller/RFIDController.java @@ -5,7 +5,9 @@ import cn.hutool.http.HttpResource; import com.alibaba.fastjson.JSONObject; import com.google.common.base.Strings; import com.storeroom.annotaion.rest.AnonymousGetMapping; +import com.storeroom.annotaion.rest.AnonymousPostMapping; import com.storeroom.modules.archives.service.ArchivesTagService; +import com.storeroom.modules.archives.service.BorrowService; import com.storeroom.modules.device.service.DeviceService; import com.storeroom.modules.device.service.DeviceSpecParamService; import com.storeroom.modules.device.service.dto.DeviceSpecParamDto; @@ -20,14 +22,15 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.data.domain.Pageable; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.net.InetAddress; import java.net.NetworkInterface; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -43,6 +46,7 @@ public class RFIDController { private final DeviceService deviceService; private final DeviceSpecParamService deviceSpecParamService; private final ArchivesTagService archivesTagService; + private final BorrowService borrowService; @ApiOperation("读取epc和Tid号") @GetMapping("/ReadEpc") @@ -245,4 +249,53 @@ public class RFIDController { return ApiResponse.success(macAddr); } + @ApiOperation("借出确认列表") + @AnonymousGetMapping("/initWaitBorrowList") + public ApiResponse initWaitBorrowList( + String orderNo, String borrowerName, String phone, Pageable page + ){ + return ApiResponse.success(borrowService.initWaitBorrowList(orderNo,borrowerName,phone,page)); + } + + @ApiOperation("归还确认列表") + @AnonymousGetMapping("/initReturnConfirmList") + public ApiResponse initReturnConfirmList( + String orderNo,String borrowerName,String phone,String archiveNo,String folderLocationDetails, + String caseName,String barcode,String tid,Pageable page + ){ + return ApiResponse.success(borrowService.initReturnConfirmList(orderNo,borrowerName,phone,archiveNo,folderLocationDetails,caseName,barcode,tid,page)); + } + + @ApiOperation("借阅者列表") + @AnonymousGetMapping("/initBorrower") + public ApiResponse initBorrower( + String query,String phone,Pageable page + ){ + return ApiResponse.success(borrowService.initBorrower(query,phone,page)); + } + + @ApiOperation("借出确认") + @AnonymousPostMapping("/billBorrowConfirm") + public ApiResponse billBorrowConfirm( + @Validated @RequestBody List orderNos + ){ + return ApiResponse.success(borrowService.billBorrowConfirm(orderNos)); + } + + @ApiOperation("归还确认") + @AnonymousPostMapping("/archivesReturnConfirm") + public ApiResponse archivesReturnConfirm( + @Validated @RequestBody List rbIds + ){ + return ApiResponse.success(borrowService.archivesReturnConfirm(rbIds)); + } + + @ApiOperation("根据单据查看详情") + @AnonymousGetMapping("/initBillDetailsByOrderNo") + public ApiResponse initBillDetailsByOrderNo( + String orderNo + ){ + return ApiResponse.success(borrowService.initBillDetailsByOrderNo(orderNo)); + } + } diff --git a/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCaseLog.java b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCaseLog.java new file mode 100644 index 0000000..a5c8236 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCaseLog.java @@ -0,0 +1,41 @@ +package com.storeroom.modules.archives.domain; + +import com.storeroom.base.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.io.Serializable; + +@Entity +@Getter +@Setter +@Table(name = "archives_case_log") +public class ArchivesCaseLog extends BaseEntity implements Serializable { + + @Id + @GeneratedValue(strategy= GenerationType.IDENTITY) + private Integer id; + + @Column(name = "case_id") + @ApiModelProperty(value = "盒id") + private String caseId; + + @Column(name = "operation_type") + @ApiModelProperty(value = "操作类型 1.装盒 2.拆盒") + private Integer operationType; + + @Column(name = "case_name") + @ApiModelProperty(value = "盒名称") + private String caseName; + + @Column(name = "tid") + @ApiModelProperty(value = "标签id") + private String tid; + + @Column(name = "barcode") + @ApiModelProperty(value = "条形码") + private String barcode; + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBill.java b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBill.java new file mode 100644 index 0000000..e4d1a30 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBill.java @@ -0,0 +1,52 @@ +package com.storeroom.modules.archives.domain; + +import com.storeroom.base.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +@Entity +@Getter +@Setter +@Table(name = "archives_check_bill") +public class ArchivesCheckBill extends BaseEntity implements Serializable { + + @Id + @Column(name = "id") + private String id; + + @Column(name = "region") + @ApiModelProperty(value = "所在区域") + private String region; + + @Column(name = "check_state") + @ApiModelProperty(value = "0.待执行 1.执行中 2.已执行") + private Integer checkState; + + @Column(name = "correct") + @ApiModelProperty(value = "在库档案") + private Integer correct; + + @Column(name = "checked") + @ApiModelProperty(value = "已盘点档案") + private Integer checked; + + @Column(name = "no_check") + @ApiModelProperty(value = "未盘点档案") + private Integer noCheck; + + @Column(name = "borrowed") + @ApiModelProperty(value = "已借出档案") + private Integer borrowed; + + @Column(name = "dislocation") + @ApiModelProperty(value = "错位档案") + private Integer dislocation; + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBillDetails.java b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBillDetails.java new file mode 100644 index 0000000..102ecbe --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/domain/ArchivesCheckBillDetails.java @@ -0,0 +1,79 @@ +package com.storeroom.modules.archives.domain; + +import com.storeroom.base.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Getter +@Setter +@Table(name = "archives_check_bill_details") +public class ArchivesCheckBillDetails implements Serializable { + + @Id + @Column(name = "id") + private String id; + + @Column(name = "bill_id") + @ApiModelProperty(value = "盘点单id") + private String billId; + + @Column(name = "check_result") + @ApiModelProperty(value = "盘点结果 0.未盘点 1.在库 2.错位 3.已借") + private Integer checkResult; + + @Column(name = "child") + @ApiModelProperty(value = "子条目数") + private Integer child; + + @Column(name = "category_type") + @ApiModelProperty(value = "门类级别") + private Integer categoryType; + + @Column(name = "category_name") + @ApiModelProperty(value = "门类名称") + private String categoryName; + + @Column(name = "fonds_no") + @ApiModelProperty(value = "全宗号") + private String fondsNo; + + @Column(name = "archive_no") + @ApiModelProperty(value = "档号") + private String archiveNo; + + @Column(name = "archive_year") + @ApiModelProperty(value = "归档年度") + private Integer archiveYear; + + @Column(name = "maintitle") + @ApiModelProperty(value = "题名") + private String maintitle; + + @Column(name = "security_class") + @ApiModelProperty(value = "密级") + private String securityClass; + + @Column(name = "department") + @ApiModelProperty(value = "部门名称") + private String department; + + @Column(name = "case_name") + @ApiModelProperty(value = "盒名称") + private String caseName; + + @Column(name = "folder_location_details") + @ApiModelProperty(value = "存放具体位置") + private String folderLocationDetails; + + @Column(name = "create_time") + @ApiModelProperty(value = "创建时间") + private Timestamp createTime; + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseLogRepository.java b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseLogRepository.java new file mode 100644 index 0000000..2066b1f --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseLogRepository.java @@ -0,0 +1,21 @@ +package com.storeroom.modules.archives.repository; + +import com.storeroom.modules.archives.domain.ArchivesCaseLog; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +public interface ArchivesCaseLogRepository extends JpaRepository{ + + @Query(nativeQuery = true, + value = "select * from archives_case_log " + + "where if(?1 is null,1=1,operation_type = ?1) " + + "and if(?2 is null,1=1,case_name like ?2) " + + "and if(?3 is null,1=1,tid like ?3) " + + "and if(?4 is null,1=1,barcode like ?4) order by create_time desc") + Page initCaseLog(Integer operationType, String caseName, String tid, String barcode,Pageable page); + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseRepository.java b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseRepository.java index db70888..2ee901a 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseRepository.java +++ b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCaseRepository.java @@ -19,16 +19,21 @@ public interface ArchivesCaseRepository extends JpaRepository initCaseList(String caseName, String tid,String barcode, Pageable page); + "if(?2 is null,1=1,tid like ?2) and if(?3 is null,1=1,barcode like ?3) and " + + "if(?4 is null,1=1,storage_type = ?4) ") + Page initCaseList(String caseName, String tid,String barcode,Integer storageType, Pageable page); @Query(nativeQuery = true, value = "select * from archives_case order by create_time desc ") Page initCaseAll(Pageable page); @Query(nativeQuery = true, - value = "select * from archives_case where storage_type in ?4 and deposit_num != 0 and if(?1 is null,1=1,case_name like ?1) and " + - "if(?2 is null,1=1,tid like ?2) and if(?3 is null,1=1,barcode like ?3) ") + countQuery = "select count(1) from archives_case where storage_type in ?4 and deposit_num != 0 and if(?1 is null,1=1,case_name like ?1) and " + + "if(?2 is null,1=1,tid like ?2) and if(?3 is null,1=1,barcode like ?3) ", + value = "select id,case_name,case_type,tid,barcode,shelf_id,folder_location,deposit_num,storage_type,storage_time,create_by,update_by,create_time,update_time," + + "(SELECT group_concat(DISTINCT CONCAT( room.NAME, ' ', di.device_name, ' ', ace.folder_location_details)) FROM archives_case_cartoning acc INNER JOIN archives_case ace ON acc.case_id = ace.id INNER JOIN device_archives_tag dat ON ace.folder_location = dat.position INNER JOIN device_info di ON dat.device_info_id = di.id INNER JOIN storeroom room ON room.id = di.storeroom_id WHERE ace.id = t.id) as folder_location_details " + + "from archives_case t where storage_type in ?4 and deposit_num != 0 and if(?1 is null,1=1,case_name like ?1) and " + + "if(?2 is null,1=1,tid like ?2) and if(?3 is null,1=1,barcode like ?3) order by t.create_time desc ") Page readyIntoCase(String caseName, String tid,String barcode,List storageType, Pageable page); @Query(nativeQuery = true, @@ -46,7 +51,7 @@ public interface ArchivesCaseRepository extends JpaRepository> alReadyInto(String caseName, String archiveNo, String title, String location, Pageable page); @@ -117,4 +122,12 @@ public interface ArchivesCaseRepository extends JpaRepository> readyCollectConfirm(List caseIds); + + @Query(nativeQuery = true, + value = "SELECT group_concat(DISTINCT CONCAT( room.NAME, ' ', di.device_name, ' ', ace.folder_location_details)) " + + "FROM archives_case_cartoning acc INNER JOIN archives_case ace ON acc.case_id = ace.id " + + "INNER JOIN device_archives_tag dat ON ace.folder_location = dat.position " + + "INNER JOIN device_info di ON dat.device_info_id = di.id " + + "INNER JOIN storeroom room ON room.id = di.storeroom_id WHERE ace.id = ?1 ") + String findLocationDetailsByCaseId(String caseId); } diff --git a/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillDetailsRepository.java b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillDetailsRepository.java new file mode 100644 index 0000000..6c09299 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillDetailsRepository.java @@ -0,0 +1,78 @@ +package com.storeroom.modules.archives.repository; + +import com.storeroom.modules.archives.domain.ArchivesCheckBillDetails; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +public interface ArchivesCheckBillDetailsRepository extends JpaRepository{ + + @Query(nativeQuery = true, + value = "select replace(uuid(),'-','') as id,?1 as bill_id,(select if(count(1)=0,0,3) from borrow_archives ba where ba.archives_id = asy.archives_id and borrow_type = 3) as check_result," + + "asy.child,asy.category_type,asy.category_name,asy.fonds_no," + + "asy.archive_no,asy.archive_year,asy.maintitle,asy.security_class," + + "asy.department,asy.case_name,asy.folder_location_details,asy.create_time " + + "from archives_summary asy where " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position) ") + List findDetailsAll(String billId); + + @Query(nativeQuery = true, + countQuery = "select count(1) from archives_summary asy where " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position where if(?1 is null,1=1,dat.device_info_id in ?1)) ", + value = "select null as id,asy.child,asy.category_type as categoryType,asy.category_name as categoryName,asy.fonds_no as fondsNo," + + "?2 as billId,(select if(count(1)=0,0,3) from borrow_archives ba where ba.archives_id = asy.archives_id and borrow_type = 3) as checkResult," + + "asy.archive_no as archiveNo,asy.archive_year as archiveYear,asy.maintitle,asy.security_class as securityClass,asy.department,asy.case_name as caseName," + + "asy.folder_location_details as folderLocationDetails,asy.create_time as createTime from archives_summary asy " + + "where " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position where if(?1 is null,1=1,dat.device_info_id in ?1)) " + + "order by create_time desc") + List findDetailsAllByDeviceId(List deviceIds,String billId); + + @Query(nativeQuery = true, + countQuery = "select count(1) from archives_summary asy where" + + "if(?1 is null,1=1,category_id in ?1) and " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position) ", + value = "select null as id,asy.child,asy.category_type as categoryType,asy.category_name as categoryName,asy.fonds_no as fondsNo," + + "?2 as billId,(select if(count(1)=0,0,3) from borrow_archives ba where ba.archives_id = asy.archives_id and borrow_type = 3) as checkResult," + + "asy.archive_no as archiveNo,asy.archive_year as archiveYear,asy.maintitle,asy.security_class as securityClass,asy.department,asy.case_name as caseName," + + "asy.folder_location_details as folderLocationDetails,asy.create_time as createTime from archives_summary asy " + + "where " + + "if(?1 is null,1=1,category_id in ?1) and " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position) " + + "order by create_time desc") + List findDetailsAllByCategoryId(List categroyIds,String billId); + + @Query(nativeQuery = true, + countQuery = "select count(1) from archives_summary asy where" + + "if(?2 is null,1=1,category_id in ?2) and " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position where if(?1 is null,1=1,dat.device_info_id in ?1)) ", + value = "select null as id,asy.child,asy.category_type as categoryType,asy.category_name as categoryName,asy.fonds_no as fondsNo," + + "?3 as billId,(select if(count(1)=0,0,3) from borrow_archives ba where ba.archives_id = asy.archives_id and borrow_type = 3) as checkResult," + + "asy.archive_no as archiveNo,asy.archive_year as archiveYear,asy.maintitle,asy.security_class as securityClass,asy.department,asy.case_name as caseName," + + "asy.folder_location_details as folderLocationDetails,asy.create_time as createTime from archives_summary asy " + + "where " + + "if(?2 is null,1=1,category_id in ?2) and " + + "asy.archives_id in (select DISTINCT acc.parent_id from archives_case_cartoning acc " + + "inner join archives_case ace on acc.case_id = ace.id " + + "inner join device_archives_tag dat on ace.folder_location = dat.position where if(?1 is null,1=1,dat.device_info_id in ?1)) " + + "order by create_time desc") + List findDetailsAllByDeviceIdAndCategoryId(List deviceIds,List categroyIds,String billId); + + @Query(nativeQuery = true, + value = "select count(1) from archives_check_bill_details where check_result = 3 ") + Integer findBorrowCountByOrderId(String orderIds); + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillRepository.java b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillRepository.java new file mode 100644 index 0000000..0beedcd --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/repository/ArchivesCheckBillRepository.java @@ -0,0 +1,18 @@ +package com.storeroom.modules.archives.repository; + +import com.storeroom.modules.archives.domain.ArchivesCheckBill; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +public interface ArchivesCheckBillRepository extends JpaRepository{ + + @Query(nativeQuery = true, + value = "select CONCAT ('PD', DATE_FORMAT(now(), '%Y%m%d'),RIGHT(CONCAT " + + "('00000' , ifnull(max(SUBSTR(id, LENGTH(CONCAT('JY',DATE_FORMAT(now(), '%Y%m%d'))) + 1," + + "LENGTH(id) - LENGTH(CONCAT ('JY' , DATE_FORMAT(now(), '%Y%m%d'))))) + 1, 1)), 5)) AS id " + + "from archives_check_bill where SUBSTR(id, 3, 8)=substr(DATE_FORMAT(now(),'%Y%m%d') , 1, 8)") + String getOrderId(); + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/repository/BorrowArchivesRepository.java b/archives/src/main/java/com/storeroom/modules/archives/repository/BorrowArchivesRepository.java index 4fe5379..6275529 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/repository/BorrowArchivesRepository.java +++ b/archives/src/main/java/com/storeroom/modules/archives/repository/BorrowArchivesRepository.java @@ -24,12 +24,12 @@ public interface BorrowArchivesRepository extends JpaRepository> findAllByArchivesIdss(List archiveIds); diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesCaseService.java b/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesCaseService.java index 31c968c..d79c924 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesCaseService.java +++ b/archives/src/main/java/com/storeroom/modules/archives/service/ArchivesCaseService.java @@ -1,9 +1,6 @@ package com.storeroom.modules.archives.service; -import com.storeroom.modules.archives.domain.ArchivesCase; -import com.storeroom.modules.archives.domain.ArchivesCaseCartoning; -import com.storeroom.modules.archives.domain.ArchivesSummary; -import com.storeroom.modules.archives.domain.StorageLog; +import com.storeroom.modules.archives.domain.*; import com.storeroom.modules.archives.service.dto.ArchivesCaseCartoningDTO; import com.storeroom.modules.archives.service.dto.CaseDTO; import com.storeroom.modules.archives.service.dto.CollectDTO; @@ -17,7 +14,7 @@ public interface ArchivesCaseService { //根据id获取档案盒信息 ArchivesCase findById(String caseId); //初始化档案盒列表 - Object initCaseList(String tid, String caseName,String barcode, Pageable page); + Object initCaseList(Integer storageType,String tid, String caseName,String barcode, Pageable page); Object initCaseAll(Pageable page); //判断档案盒名称是否重复 Object caseNameIsRepeat(String caseId,String caseName); @@ -41,6 +38,10 @@ public interface ArchivesCaseService { Object unpacking(List caseId); //查看盒内详情 Object findInCase(String caseId); + //批量删除盒 解除相关标签 + void batchDelCase(List doDel); + //初始化档案盒日志 + Object initCaseLog(Integer operationType,String caseName,String tid,String barcode,Pageable page); //设备删除 设备内是否有档案 Boolean isHaveArchives(List deviceId); @@ -77,6 +78,8 @@ public interface ArchivesCaseService { Object initStorageLogDetailes(Integer logId); //根据id集合获取出入库列表 List initStorageLogList(List logs); + //根据id集合获取档案盒装拆盒记录 + List initCaseLogList(List logs); //第三方回调 Integer externalCallback(String caseId); } diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/ArrangeService.java b/archives/src/main/java/com/storeroom/modules/archives/service/ArrangeService.java new file mode 100644 index 0000000..bd52b49 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/service/ArrangeService.java @@ -0,0 +1,10 @@ +package com.storeroom.modules.archives.service; + +import com.storeroom.modules.archives.service.dto.ArrangeAddDTO; + +public interface ArrangeService { + + //新增盘点 + Object addArrange(ArrangeAddDTO dto); + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/dto/ArrangeAddDTO.java b/archives/src/main/java/com/storeroom/modules/archives/service/dto/ArrangeAddDTO.java new file mode 100644 index 0000000..7272898 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/service/dto/ArrangeAddDTO.java @@ -0,0 +1,19 @@ +package com.storeroom.modules.archives.service.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class ArrangeAddDTO { + + //设备id集合 + private List deviceIds; + //门类id集合 + private List categoryIds; + //所属区域 + private String region; + +} diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesCaseServiceImpl.java b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesCaseServiceImpl.java index a701111..b56d530 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesCaseServiceImpl.java +++ b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesCaseServiceImpl.java @@ -7,6 +7,7 @@ import com.storeroom.modules.archives.domain.vo.StorageDetailesVO; import com.storeroom.modules.archives.repository.*; import com.storeroom.modules.archives.domain.ArchivesCase; import com.storeroom.modules.archives.service.ArchivesCaseService; +import com.storeroom.modules.archives.service.ArchivesTagService; import com.storeroom.modules.archives.service.dto.ArchivesCaseCartoningDTO; import com.storeroom.modules.archives.domain.vo.ArchivesCaseVO; import com.storeroom.modules.archives.service.dto.CaseDTO; @@ -50,6 +51,8 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { private final StorageLogRepository storageLogRepository; private final StorageDetailsLogRepository storageDetailsLogRepository; private final DeviceArchivesTagRepository deviceArchivesTagRepository; + private final ArchivesTagService archivesTagService; + private final ArchivesCaseLogRepository archivesCaseLogRepository; @PersistenceContext EntityManager entityManager; @@ -60,11 +63,11 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { } @Override - public Object initCaseList(String tid, String caseName,String barcode, Pageable page) { + public Object initCaseList(Integer storageType,String tid, String caseName,String barcode, Pageable page) { tid = StringUtils.isEmpty(tid) ? null : "%"+ tid +"%"; caseName = StringUtils.isEmpty(caseName) ? null : "%"+ caseName +"%"; barcode = StringUtils.isEmpty(barcode) ? null : "%"+ barcode +"%"; - Page pageCase = caseRepository.initCaseList(caseName,tid,barcode,page); + Page pageCase = caseRepository.initCaseList(caseName,tid,barcode,storageType,page); return PageUtil.toPage(pageCase); } @@ -255,6 +258,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { entityManager.createNativeQuery(psql).executeUpdate(); archivesSummaryRepository.cartoning(dtos.get(0).getArchivesParentsId(),caseIdArr,caseNames.stream().collect(Collectors.joining(","))); } + this.writeCaseLog(caseIds,1); return archivesCaseCartonings.size(); } @@ -303,8 +307,10 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { @Override @Transactional(rollbackFor = Exception.class) public Object unpacking(List caseIdList) { + Set unpackingCaseIds = new HashSet<>(); Integer result = 0; for(String caseId:caseIdList){ + unpackingCaseIds.add(caseId); ArchivesCase archivesCase = caseRepository.findById(caseId).get(); List editArchivesSummaries = new ArrayList<>(); List archivesIds = new ArrayList<>(); @@ -397,6 +403,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { caseRepository.cartoning(caseId,0,0); result = result+1; } + this.writeCaseLog(unpackingCaseIds,2); return result; } @@ -416,6 +423,33 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { return vo; } + @Override + @Transactional(rollbackFor = Exception.class) + public void batchDelCase(List doDel) { + List unbind = new ArrayList<>(); + //循环解除标签 + for(ArchivesCase archivesCase:doDel){ + if(!StringUtils.isEmpty(archivesCase.getTid())){ + CaseDTO dto = new CaseDTO(); + dto.setTid(archivesCase.getTid()); + dto.setLabelType(2); + unbind.add(dto); + } + } + //解除标签 + archivesTagService.unbindTag(unbind); + //删除盒 + caseRepository.deleteAll(doDel); + } + + @Override + public Object initCaseLog(Integer operationType, String caseName, String tid, String barcode,Pageable page) { + tid = StringUtils.isEmpty(tid) ? null : "%"+ tid +"%"; + caseName = StringUtils.isEmpty(caseName) ? null : "%"+ caseName +"%"; + barcode = StringUtils.isEmpty(barcode) ? null : "%"+ barcode +"%"; + return PageUtil.toPage(archivesCaseLogRepository.initCaseLog(operationType,caseName,tid,barcode,page)); + } + @Override public Boolean isHaveArchives(List deviceId) { Integer count = caseRepository.isHaveArchives(deviceId); @@ -468,7 +502,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { ArchivesCase thisCase = caseRepository.findById(dto.getCaseId()).get(); thisCase.setShelfId(dto.getShelfId()); thisCase.setFolderLocation(dto.getPosition()); - thisCase.setFolderLocationDetails(dto.getPositionName()); + thisCase.setFolderLocationDetails(caseRepository.findLocationDetailsByCaseId(thisCase.getId())); thisCase.setStorageType(isCallback ? 1:2); cases.add(thisCase); @@ -483,7 +517,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { if(caseId.equals(dto1.getCaseId())){ newShelfId += dto1.getShelfId() + ","; newLocation += dto1.getPosition() + ","; - newLocationName += dto1.getPositionName()+","; + newLocationName += caseRepository.findLocationDetailsByCaseId(dto1.getCaseId()) +","; resultOk++; } } @@ -522,7 +556,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { ArchivesCase archivesCase = caseRepository.findCaseById(dto.getCaseId()); archivesCase.setShelfId(dto.getShelfId()); archivesCase.setFolderLocation(tag.getPosition()); - archivesCase.setFolderLocationDetails(tag.getPosition_name()); + archivesCase.setFolderLocationDetails(caseRepository.findLocationDetailsByCaseId(dto.getCaseId())); archivesCase.setStorageType(2); cases.add(archivesCase); @@ -541,7 +575,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { DeviceArchivesTag tag1 = optional1.get(); newShelfId += tag1.getId() + ","; newLocation += tag1.getPosition() + ","; - newLocationName += tag1.getPosition_name()+","; + newLocationName += caseRepository.findLocationDetailsByCaseId(dto1.getCaseId())+","; resultOk++; } } @@ -682,8 +716,24 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { @Override public Object grantConfirm(List caseIds) { List cases = caseRepository.findAllById(caseIds); - caseRepository.manualConfirm(caseIds,0); +// caseRepository.manualConfirm(caseIds,0); for(ArchivesCase thisCase:cases){ + //清空相关入库信息 + thisCase.setStorageType(0); + thisCase.setShelfId(null); + thisCase.setFolderLocation(null); + thisCase.setFolderLocationDetails(null); + + List thisSummarys = archivesSummaryRepository.findAllByCaseNoLike(thisCase.getId()); + List grantSummary = new ArrayList<>(); + for(ArchivesSummary thisSummary:thisSummarys){ + thisSummary.setShelfId(null); + thisSummary.setFolderLocation(null); + thisSummary.setFolderLocationDetails(null); + grantSummary.add(thisSummary); + } + archivesSummaryRepository.saveAllAndFlush(grantSummary); + caseRepository.saveAndFlush(thisCase); this.recordStorage(thisCase,4); } return caseIds.size(); @@ -715,6 +765,9 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { return storageLogRepository.findAllById(logs); } + @Override + public List initCaseLogList(List logs) { return archivesCaseLogRepository.findAllById(logs);} + @Override @Transactional public Integer externalCallback(String caseId) { @@ -752,7 +805,7 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { log.setTid(thisCase.getTid()); log.setBarcode(thisCase.getBarcode()); log.setStorageType(StorageType); - log.setFolderLocationDetails(thisCase.getFolderLocationDetails()); + log.setFolderLocationDetails(caseRepository.findLocationDetailsByCaseId(thisCase.getId())); log = storageLogRepository.save(log); List> lists = storageDetailsLogRepository.inCaseArchives(thisCase.getId()); List sdLog = JSON.parseObject(JSON.toJSONString(lists), new TypeReference>() {}); @@ -762,4 +815,27 @@ public class ArchivesCaseServiceImpl implements ArchivesCaseService { storageDetailsLogRepository.saveAllAndFlush(sdLog); return log; } + + + + //盒日志 + private Integer writeCaseLog(Set caseIds,Integer operationType){ + List archivesCaseLogs = new ArrayList<>(); + for(String caseId : caseIds){ + ArchivesCase archivesCase = caseRepository.findCaseById(caseId); + if(null!=archivesCase){ + ArchivesCaseLog log = new ArchivesCaseLog(); + log.setCaseId(archivesCase.getId()); + log.setCaseName(archivesCase.getCaseName()); + log.setOperationType(operationType); + log.setTid(archivesCase.getTid()); + log.setBarcode(archivesCase.getBarcode()); + archivesCaseLogs.add(log); + } + } + if(archivesCaseLogs.size()!=0){ + archivesCaseLogRepository.saveAll(archivesCaseLogs); + } + return archivesCaseLogs.size(); + } } diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesServiceImpl.java b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesServiceImpl.java index d135b3a..bddd899 100644 --- a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesServiceImpl.java +++ b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArchivesServiceImpl.java @@ -177,8 +177,13 @@ public class ArchivesServiceImpl implements ArchivesService { } String queryField = queryFields.stream().map(String::valueOf).collect(Collectors.joining(",")); String queryTable = archivesType.getEnName(); - String appendQuery = "tid,(select group_concat(case_name) from archives_case t where find_in_set(t.id,z.case_no))," + - "folder_location,borrow_type,barcode "; + String appendQuery = "tid,(select group_concat(case_name) from archives_case t where find_in_set(t.id,z.case_no)),"; + if(archivesType.getIsType()==ArchivesTypeEnum.inChive.getCode()){ + appendQuery = appendQuery + "(SELECT group_concat(DISTINCT CONCAT( room.NAME, ' ', di.device_name, ' ', ace.folder_location_details)) FROM archives_summary asy INNER JOIN archives_case_cartoning acc ON asy.archives_id = acc.archives_id INNER JOIN archives_case ace ON acc.case_id = ace.id INNER JOIN device_archives_tag dat ON ace.folder_location = dat.position INNER JOIN device_info di ON dat.device_info_id = di.id INNER JOIN storeroom room ON room.id = di.storeroom_id WHERE asy.archives_id = z.id),"; + }else{ + appendQuery = appendQuery + "(SELECT group_concat(DISTINCT CONCAT( room.NAME, ' ', di.device_name, ' ', ace.folder_location_details)) FROM archives_summary asy INNER JOIN archives_case_cartoning acc ON asy.archives_id = acc.parent_id INNER JOIN archives_case ace ON acc.case_id = ace.id INNER JOIN device_archives_tag dat ON ace.folder_location = dat.position INNER JOIN device_info di ON dat.device_info_id = di.id INNER JOIN storeroom room ON room.id = di.storeroom_id WHERE asy.archives_id = z.id),"; + } + appendQuery = appendQuery + "(select borrow_type from borrow_archives where archives_id = z.id order by create_time desc limit 0,1),barcode "; appendQuery = queryField.length() == 0 ? appendQuery : ","+appendQuery; List list = entityManager.createNativeQuery("select "+queryField+appendQuery+" from "+queryTable + " z where z.id = '"+archivesId+"'").getResultList(); queryFields.add("tid");queryCnFields.add("TID");queryEditLength.add(null);queryisLine.add(null); @@ -491,7 +496,6 @@ public class ArchivesServiceImpl implements ArchivesService { @Override @Transactional(rollbackFor = Exception.class) public Object editFile(ArchivesFileDTO dto) { - int result = 0; String archiveId = ""; ArchivesType archivesType = archivesTypeRepository.findById(dto.getCategoryId()).get(); List queryShow = archivesDictionaryRepository.findAllByCategoryIdAndIsTypeOrderByIsSequenceAsc(dto.getCategoryId(),3); @@ -517,10 +521,12 @@ public class ArchivesServiceImpl implements ArchivesService { } insertValue = insertValue.length() != 0 ? insertValue.substring(0,insertValue.length()-1) : ""; String sql = "insert into file_"+archivesType.getEnName()+"("+queryFields+") values ("+insertValue+")"; - int thisresult = entityManager.createNativeQuery(sql).executeUpdate(); - result += thisresult; + entityManager.createNativeQuery(sql).executeUpdate(); archiveId = json.get("archive_id")+""; } + String sql = "select count(1) from file_"+archivesType.getEnName()+" where archive_id = '"+archiveId+"'"; + List list = entityManager.createNativeQuery(sql).getResultList(); + int result = Integer.parseInt(list.get(0)+""); entityManager.createNativeQuery("update "+archivesType.getEnName()+" set child = "+result+" where id='"+archiveId+"'").executeUpdate(); entityManager.createNativeQuery("update archives_summary set child = "+result+" where archives_id = '"+archiveId+"'").executeUpdate(); return result; diff --git a/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArrangeServiceImpl.java b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArrangeServiceImpl.java new file mode 100644 index 0000000..d45a077 --- /dev/null +++ b/archives/src/main/java/com/storeroom/modules/archives/service/impl/ArrangeServiceImpl.java @@ -0,0 +1,69 @@ +package com.storeroom.modules.archives.service.impl; + +import com.storeroom.modules.archives.domain.ArchivesCheckBill; +import com.storeroom.modules.archives.domain.ArchivesCheckBillDetails; +import com.storeroom.modules.archives.repository.ArchivesCheckBillDetailsRepository; +import com.storeroom.modules.archives.repository.ArchivesCheckBillRepository; +import com.storeroom.modules.archives.service.ArrangeService; +import com.storeroom.modules.archives.service.dto.ArrangeAddDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ArrangeServiceImpl implements ArrangeService { + + private final ArchivesCheckBillRepository archivesCheckBillRepository; + private final ArchivesCheckBillDetailsRepository archivesCheckBillDetailsRepository; + + @Override + @Transactional + public Object addArrange(ArrangeAddDTO dto) { + ArchivesCheckBill bill = this.createBill(dto.getRegion(),0); + //未成功生成清单 + if(null == bill) + return null; + //获取相关在库档案信息 + List checkDetaills = null; + if(null != dto.getDeviceIds() && dto.getDeviceIds().size() !=0 && null != dto.getCategoryIds() && dto.getCategoryIds().size() !=0){ + checkDetaills = archivesCheckBillDetailsRepository.findDetailsAllByDeviceIdAndCategoryId(dto.getDeviceIds(),dto.getCategoryIds(),dto.getRegion()); + }else if(null != dto.getDeviceIds() && dto.getDeviceIds().size() != 0){ + checkDetaills = archivesCheckBillDetailsRepository.findDetailsAllByDeviceId(dto.getDeviceIds(),dto.getRegion()); + }else if(null != dto.getCategoryIds() && dto.getCategoryIds().size() != 0){ + checkDetaills = archivesCheckBillDetailsRepository.findDetailsAllByCategoryId(dto.getCategoryIds(),dto.getRegion()); + }else{ + checkDetaills = archivesCheckBillDetailsRepository.findDetailsAll(dto.getRegion()); + } + + checkDetaills = archivesCheckBillDetailsRepository.saveAll(checkDetaills); + bill.setBorrowed(archivesCheckBillDetailsRepository.findBorrowCountByOrderId(bill.getId())); + return bill; + } + + + + //生成清单 + public ArchivesCheckBill createBill(String region,Integer loop){ + ArchivesCheckBill bill = null; + try { + bill = new ArchivesCheckBill(); + bill.setId(archivesCheckBillRepository.getOrderId()); + bill.setCheckState(0); + bill.setRegion(region); + bill.setCorrect(0); + bill.setChecked(0); + bill.setNoCheck(0); + bill.setBorrowed(0); + bill.setDislocation(0); + }catch (Exception e){ + if(loop==4) + return null; + bill = this.createBill(region,loop); + } + return bill; + } + +}